题目大意
一个n的排列,每次可以把一个数移到最前面,求最少操作次数来排序。
贪
和我女朋友czl出的题好像(弱化版)
找一个最长后缀(即值是形如[x,n])子序列,答案就是n-子序列长度
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define fd(i,a,b) for(i=a;i>=b;i--)
using namespace std;
const int maxn=100000+10;
int a[maxn];
int i,j,k,l,t,n,m,ca,ans;
int read(){
int x=0,f=1;
char ch=getchar();
while (ch<'0'||ch>'9'){
if (ch=='-') f=-1;
ch=getchar();
}
while (ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int main(){
freopen("book.in","r",stdin);freopen("book.out","w",stdout);
ca=read();
while (ca--){
n=read();
fo(i,1,n) a[i]=read();
ans=n;
j=n;
fd(i,n,1)
if (a[i]==j) ans--,j--;
printf("%d\n",ans);
}
return 0;
}