Let pos(x)pos(�) be the index of x� in the permutation p�.意思是输入的x在数组p的哪个位置 p[x]=i
核心;
看交换的次数找到一般规律 使p[a[i+1]]<p[a[i]]需要p[a[i+1]]-p[a[i]]次
破坏条件
代码
#include<bits/stdc++.h>
using namespace std;
int p[100010],a[100010];
//好坏数字
int main(){
int t;
cin >> t;
while(t--){
int s=0,n,m,d,min1=9999999;
cin >> n >> m >> d;
for(int i=1;i<=n;i++) {
int q;cin >> q;
p[q]=i;
}
for(int i=1;i<=m;i++) cin >> a[i];
for(int i=1;i<m;i++){
/*看看有好的吗*/ if(p[a[i]]>=p[a[i+1]]||p[a[i+1]]>p[a[i]]+d){
cout << 0<< endl;
s=1;
break;
}
}
if(!s){
for(int i=1;i<m;i++){
/*看第一个等式*/int b=p[a[i+1]]-p[a[i]];
/*第二个*/ if(n-1>d){
int c=d-b+1;
if(c>0&&c<=n-1)min1=min(min1,c);
}
min1=min(b,min1);
}
cout << min1 << endl;
}
}
}