time limit per test1.5 seconds
memory limit per test512 megabytes
inputstandard input
outputstandard output
Example
input
6
4 1
2 3 5 4
5 6
1 1 3 4 4
1 10
2
2 10
11 9
2 10
12 11
5 18
81 324 218 413 324
output
3
0
0
-1
1
3
首先找到不满足非递减的位置的元素,然后考虑将这个数换掉,但是问题是换掉这个数要满足a[i] > x;这样一来,就需要找到找到这样一个满足条件的位置,并记录在pos中,然后从满足条件的 pos往后到 i - 1的部分进行交换,每交换一次就讲记录答案的ans加一,然后判断是不是满足非递减的情况,如果满足的时候,输出ans,不满足的时候直接输出 -1
在中途的时候可以优化一下下,如果说交换了一波时候还没有满足a[i] >= a[i-1];就直接记录下,最后输出 -1
int a[maxn];
int main()
{
int _ = read;
while(_--){
int n = read,x=read;
for(itn i=1;i<=n;i++) cin >> a[i];
int flag = 1;
int ans = 0;
for(int i=2;i<=n;i++){
int pos = 0;
if(a[i] < a[i-1]){
for(int j=1;j<=i-1;j++){
if(a[j] > x){
pos = j;///get the right position
break;
}
}
if(pos == 0) break;
for(int j=pos;j<=i-1;j++){
if(a[j] > x){/// swap the two numbers
swap(x,a[j]);
ans ++;
}
}
if(a[i] < a[i-1]){/// output -1
flag = 0;
break;
}
}
}
if(flag == 0){
puts("-1");
continue;
}
for(int i=1;i<n;i++){
if(a[i] > a[i+1]){
flag = 0;
break;
}
}
if(flag) cout << ans <<endl;
else puts("-1");
}
return 0;
}