#include<bits/stdc++.h>
using namespace std;
int const N = 100010;
int main()
{
int en,mid;
int n;
int a[N];
int b[N];
cin>>n;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<n;i++)
{
scanf("%d",&b[i]);
for(int j=0;j<n;j++)//离散化
{
if(a[j]==b[i])
{
b[i]=j+1;
break;
}
}
}
int u[N]={};
memset(u,0,sizeof(u));
for(int i=0;i<n;i++)//求最长上升子序列
{
if(!en||u[en]<b[i])
{
en++;
u[en]=b[i];
}
else
{
mid=lower_bound(u+1,u+1+en,b[i])-u;
u[mid]=b[i];
}
// cout<<mid<<" "<<f[i]<<endl;
// for(int i=0;i<=en+3;i++) cout<<u[i]<<" ";
// cout<<endl;
}
cout<<en<<endl;
return 0;
}
60分,思路:离散化然后求最长上升