#include<iostream>
using namespace std;
int f[100001],b[100005],f2[100005];
int len=1;
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9'){ if(ch=='-') f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
inline void put(int x)
{
register int i=1e6;
while(i&&x/i==0) i/=10;
if(i){
for(;i;i/=10){
putchar(x/i%10+'0');
}
}
else{
putchar('0');
}
}
int find(int x)
{
int l=0,r=len;
while(l<r)
{
int mid=(l+r)>>1;
if(f2[mid]>x)
{
r=mid;
}
else
{
l=mid+1;
}
}
return r;
}
int main()
{
int a,ans=-1,cnt=1;
int n=read();
for(int i=1;i<=n;i++)
{
a=read();
f[a]=i;
}
for(int i=1;i<=n;i++)
{
b[i]=read();
b[i]=f[b[i]];
}
f2[1]=b[1];
for(int i=2;i<=n;i++)
{
if(b[i]>f2[len])
f2[++len]=b[i];
else
{
if(b[i]<=f[1])
{
f2[1]=b[i];
}
else
f2[find(b[i])]=b[i];
}
}
cout<<len;
return 0;
}
求助大佬