【题意】题目给了两个代表颜色的序列,然后给了q个操作,每个操作有个[l,r]区间,表示你可以把[l,r]区间里面所有的数任意排列,问最后能否利用这些操作使得a变到b数组。
【解题方法】
【AC 代码】
#include <bits/stdc++.h>
using namespace std;
const int maxn=1002;
pair<int,int>p[maxn];
int main()
{
int T;
int n,m;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
int x;
for(int i=1; i<=n; i++){
scanf("%d",&x);
p[i]=make_pair(0,x);
}
for(int i=1; i<=n; i++){
scanf("%d",&x);
for(int j=1; j<=n; j++){
if(p[j].second==x&&!p[j].first){
p[j].first=i;
break;
}
}
}
int l,r;
while(m--){
scanf("%d%d",&l,&r);
sort(p+l,p+r+1);
}
bool ok=1;
for(int i=1; i<=n; i++){
if(p[i].first!=i){
ok=0;
break;
}
}
if(ok) puts("Yes");
else puts("No");
}
}