想填一下以前的坑,结果发现是巨坑Orz
lcs就是把a序列的位置映射到b序列上,求一个用树状数组lis即可
好简单啊,我真的是咸鱼Orz
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,ans;
int a[100005],b[100005],c[100005],t[110005];
void modify(int x,int Max) {
for(int i=x; i<=n; i+=i&-i) t[i]=max(t[i],Max);
}
int ask(int x) {
int rees=0;
for(int i=x; i; i-=i&-i) res=max(res,t[i]);
return res;
}
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d",&a[i]),c[a[i]]=i;
for(int i=1; i<=n; i++) {
scanf("%d",&b[i]);
int f=ask(c[b[i]])+1;
ans=max(ans,f);
modify(c[b[i]],f);
}
printf("%d",ans);
}