n>=2*x 时可以实现交换任意两个数字
例如 n=5 x=2
5 4 3 2 1 实现3与4的交换 成为 5 3 4 2 1
5 4 3 2 1
5 1 3 2 4
5 1 4 2 3
5 3 4 2 1
当n<x*2时 n-x+1到x之间的元素没办法完成交换 先特判是否符合顺序
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int t;
int n,x;
int a[100005];
int b[100005];
bool solve(){
if(n>=2*x||is_sorted(a+1,a+1+n)) return true;
else{
sort(b+1,b+1+n);
for(int i=n-x+1;i<=x;i++){
if(a[i]!=b[i]) return false;
}
return true;
}
}
signed main(){
cin>>t;
while(t--){
cin>>n>>x;
for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
if(solve()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}