最长公共子序列(基础和优化模板)
include<bits/stdc++.h>
define int long long
using namespace std;
const int N=1e5+10;
map<int,int>mp;
int f[N],cnt,n,a[N],b[N];
signed main()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
cin>>a[i];
mp[a[i]]=i;
}
for(int i = 1; i <= n; i++)
{
cin >> b[i];
b[i] = mp[b[i]];
}
f[++cnt]=b[1];
for (int i = 2;i <= n;i++)
{
if (b[i] >= f[cnt])
{
f[++cnt] = b[i];
}
else
{
int x = lower_bound(f+1,f+cnt+1,b[i])-f;
f[x] = b[i];
}
}
cout << cnt << "\n";
return 0;
}