一,思路:
做这种题型,当他问我们最少操作次数,使得的数组什么什么的时候,我们可以大概往这这方面想,那些操作是必须要执行的,不能通过其他的来实现。例如这题,当两个相邻的数子逆序的时候,他只能通过以自己做为x(排序中介线),比如2 1,像这样的逆序只能通过,以2为x,或者以1为x才能使他们循序反转,因此这里必须要一次操作。
二,代码:
#include<iostream>
using namespace std;
const int N=1e5+10;
int loc[N];
void solved(){
int n;
cin>>n;
int x;
for(int i=1;i<=n;i++) {
cin>>x;
loc[x]=i;
}
int cnt=0;
for(int i=1;i<n;i++){
if(loc[i]>loc[i+1]) cnt++;
}
cout<<cnt<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solved();
}
return 0;
}