马克家收藏了一套书,这套书叫《OIER故事集》,这套书有 n 本,每本书有一个编号,从 1 号到 n 号。
马克把这些书按照编号从小到大,从上往下摞成一摞。马克对这套书很珍视,不允许其他人动。
有一天一格到马克家玩,马克因为和妹子约会,就让一格自己呆在家里。一格因为对这套书非常好奇,偷偷的看了一下,结果发现书中竟然有 ljs 和 commonc 的故事。一格看的入了迷,结果把一摞书的顺序弄乱了。
眼看着马克就要回来了,一格需要把书恢复到原状,由于每本书都比较重,所以一格能做的操作是把一本书从书堆中抽出来,然后把这本书放到书堆的顶部。
给你打乱的书的顺序,你能帮一格算算最少需要几次上述操作,才能恢复书的顺序。
第一行包含一格正整数T(T≤10),表示数据组数。
对于每组数据,第一行为一格整数 n。
接下来的一行有 n 个用空格分开的正整数,表示一格打乱后的书的顺序,从上到下。
对于每组数据,输出一行一个整数,表示一格最少经过几次操作才能恢复书的顺序。
// input
2
4
4 1 2 3
5
1 2 3 4 5
// output
3
0
#include<bits/stdc++.h>
using namespace std;
int t,n,a[500005],ans,last,head=250000;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>t;
while(t--)
{
cin>>n;
ans=0;
for(int i=head+1;i<=head+n;i++)
cin>>a[i];
last=a[head+n];
while(last!=n)
{
a[--head]=last;
ans++;
last=a[head+n];
}
cout<<ans<<endl;
}
return 0;
}
可以过样例,但是改了半天还是 RE,求条 QWQ