P6820
首先考虑
若
否则,
然后我们注意到两个数列都是排列。这就意味着,对于每一个
#include<bits/stdc++.h>
using namespace std;
int n,a[1000010],p[1000010];
int dp[2000010];
int main()
{
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;int op;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>op,p[op]=i;
for(int i=n;i<=2*n;i++) dp[i]=i-n;
for(int i=1;i<=n;i++)
{
int l=n-i;
dp[p[a[i]]+l]=min(dp[p[a[i]]+l+1],dp[p[a[i]]+l-1]+1);
}cout<<dp[n]+n;
return 0;
}