https://codeforces.com/problemset/problem/1592/B
题目:一个长度为n的数组a,对a进行排序,排序需要满足,判断他是否可能变为非递减数组。
题解:取数组两端 x,n-x。
只需判断是否存在n-x~x的段落,若存在还需要判断 该段落序列 与 排序后的序列 是否相等。
1.当不存在n-x,x的段落:
——|————|——,左端为x,右端为n-x,两端的部分都可以和其他位置互换。
2.当存在n-x,x的段落:
——|————|——,左端为n-x,右端为x,中间的位置不能和两端互换。
#include<bits/stdc++.h>
#define ms(a) memset(a,0,sizeof(a));
typedef long long ll;
using namespace std;
const int N = 1e5 + 5;
int a[N], b[N];
bool solve() {
int n, x;
cin >> n >> x;
for (int i = 0; i < n; i++) {
cin >> a[i];
b[i] = a[i];
}
sort(b, b + n);
bool flag = 1;
for (int i = n - x; i < x; i++) {
if (a[i]!=b[i]) {
flag = 0;
break;
}
}
return flag;
}
int main() {
int t;
cin >> t;
while (t--) {
if (solve())cout << "YES" << endl;
else cout << "NO" << endl;
}
}