题意:
有两个序列a,p,对序列a处理,保证只能交换a[p[i]]和a[p[i]+1],问能不能保证处理后为递减序列
题解:
写冒泡,然后加个判断;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 110;
int t, n, m, a[maxn], p[maxn];
bool flag;
int main()
{
int x;
cin >> t;
while (t--)
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
memset(p, 0, sizeof p);
for (int i = 1; i <= m; i++)
{
cin >> x;
p[x] = 1;
}
flag = true;
for (int i = 1; i < n; i++)
{
for (int j = 1; j <= n - i; j++)
if (a[j] > a[j + 1])
{
swap(a[j], a[j + 1]);
if (p[j] == 0)
{
flag = false;
break;
}
}
if (!flag)
break;
}
if (flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}