B. WeirdSort
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given an arrayaof lengthn.

You are also given a set ofdistinctpositionsp1,p2,…,pm, where1≤pi<n.The positionpimeans that you can swap elementsa[pi]anda[pi+1].You can apply this operation any number of times for each of the givenpositions.

Your task is to determine if it is possible to sort the initial array in non-decreasing order (a1≤a2≤⋯≤an) using only allowed swaps.

For example, ifa=[3,2,1]andp=[1,2], then we can first swap elementsa[2]anda[3](because position2is contained in the given setp).We get the arraya=[3,1,2].Then we swapa[1]anda[2](position1is also contained inp).We get the arraya=[1,3,2].Finally, we swapa[2]anda[3]again and get the arraya=[1,2,3], sorted in non-decreasing order.

You can see that ifa=[4,1,2,3]andp=[3,2]then you cannot sort the array.

You have to answertindependent test cases.

Input
The first line of the input contains one integert (1≤t≤100) — the number of test cases.

Thenttest cases follow.The first line of each test case contains two integersnandm (1≤m<n≤100) — the number of elements inaand the number of elements inp.The second line of the test case containsnintegersa1,a2,…,an (1≤ai≤100).The third line of the test case containsmintegersp1,p2,…,pm (1≤pi<n, allpiare distinct) — the set of positions described in the problem statement.

Output
For each test case, print the answer — “YES” (without quotes) if you can sort the initial array in non-decreasing order (a1≤a2≤⋯≤an) using only allowed swaps.Otherwise, print “NO”.

Example
inputCopy
6
3 2
3 2 1
1 2
4 2
4 1 2 3
3 2
5 1
1 2 3 4 5
1
4 2
2 1 4 3
1 3
4 2
4 3 2 1
1 3
5 2
2 1 2 3 3
1 4
outputCopy
YES
NO
YES
YES
NO
YES

题意:就是给了n个数 和一个长度为m的p数组
这n个数是一个关于n的排列之一 你可以进行两个数的交换 交换a[i]和a[i+1]
不过i需要在p数组中

思路:范围很小 直接两个for去暴力
第一个for其实就是限制整体的扫描次数
第二个for就是去比较相邻两个大小进行交换

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define me(a,x) memset(a,x,sizeof a)
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define all(x) (x).begin(), (x).end()
#define pb(a) push_back(a)
#define paii pair<int,int>
#define pali pair<ll,int>
#define pail pair<int,ll>
#define pall pair<ll,ll>
#define fi first
#define se second
int a[105];
int p[105];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        me(p,0);
        int n,m;
        cin>>n>>m;
        for(int i=1; i<=n; i++)
            cin>>a[i];
        for(int i=1; i<=m; i++)
        {
            int x;
            cin>>x;
            p[x]=1;
        }
        int flag=0;
        for(int i=1; i<=n; i++)
        {
            for(int j=n; j; j--)
            {
                if(p[j-1] && a[j-1]>a[j])
                {
                    int t=a[j-1];
                    a[j-1]=a[j];
                    a[j]=t;
                }
                else if(a[j]>=a[j-1])
                    continue;
                else
                {
                    flag=1;
                    break;
                }
            }
        }
        if(flag)
            puts("NO");
        else
            puts("YES");

    }
    return 0;
}