rt,WA on #2
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100010];
int b[100010];
int vis[100010];
int tree[400010];
int f[100010];
int ans;
int query(int o,int l,int r,int x,int y){
if(x<=l&&r<=y){
return tree[o];
}
int mid=(l+r)/2;
int lmax=-1e9,rmax=-1e9;
if(mid>=x){
lmax=query(o*2,l,mid,x,y);
}
if(mid+1<=y){
rmax=query(o*2+1,mid+1,r,x,y);
}
return max(lmax,rmax);
}
void cha(int o,int l,int r,int ll,int rr,int k){
if(ll<=l&&r<=rr){
tree[o]=max(tree[o],k);
return;
}
int mid=(l+r)/2;
if(ll<=mid){
cha(o*2,l,mid,ll,rr,k);
}
if(rr>mid){
cha(o*2+1,mid+1,r,ll,rr,k);
}
tree[o]=max(tree[o*2],tree[o*2+1]);
}
signed main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
vis[a[i]]=i;
}
for(int i=1;i<=n;i++){
scanf("%d",&b[i]);
b[i]=vis[b[i]];
}
for(int i=1;i<=n;i++){
f[i]=max(f[i],query(1,0,n,1,b[i]-1)+1);
cha(1,0,n,b[i],b[i],f[i]);
ans=max(f[i],ans);
}
printf("%d",ans);
return 0;
}