题意:
解法:
如果序列本来就有序,那么不需要交换.
因为x只能和比他大的a[i]交换,因此显然在交换中,x只会不断变大.
从左到右遍历,每当x遇到比他大的数a[k],一定要交换,
因为如果不交换的话,一定无解,因为x以后一定在a[k]右边,不可能满足升序条件.
我们每进行一次交换,就check一下是否有序,如果有序则输出答案,否则继续遍历.
code:
#include <bits/stdc++.h>
using namespace std;
const int maxm=2e6+5;
int a[maxm];
int n,x;
bool check(){
for(int i=2;i<=n;i++){
if(a[i]<a[i-1]){
return 0;
}
}
return 1;
}
void solve(){
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(check()){
cout<<0<<endl;return ;
}
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]>x){
swap(a[i],x);
ans++;
}
if(check()){
cout<<ans<<endl;return ;
}
}
if(!check()){
cout<<-1<<endl;return ;
}
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
int T;cin>>T;while(T--)
solve();
return 0;
}