模板
#include <iostream> #include <cstdio> using namespace std; int a[100005],loc[100005],b[100005],k,n,l,r,mid; int lis(){//相当于求最长不下降子序列 a[1]=b[1];k=1; for(int i=2;i<=n;i++){ if(a[k]<b[i])a[++k]=b[i]; else{ l=1;r=k; while(l<=r){ mid=(l+r)/2; if(a[mid] < b[i])l=mid+1; else r=mid-1; } a[l]=b[i]; } } return k; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); for(int i=1;i<=n;i++)loc[b[i]]=i;//构造一 for(int i=1;i<=n;i++) //个新的 b[i]=loc[a[i]]; //映射 printf("%d ", lis()); return 0; }