勇闯黄金十二宫射手宫
Link
解题思路
将后一个序列映射出来,贪心+二分选择。
code
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
int n,ans;
int a[100010];
int b[100010];
int c[100010];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
int t;
scanf("%d",&t);
b[t]=i;
}
for(int i=1;i<=n;i++)
if(b[a[i]]>c[ans])
c[++ans]=b[a[i]];
else
{
int t=lower_bound(c+1,c+ans+1,b[a[i]])-c;
c[t]=min(c[t],b[a[i]]);
}
cout<<ans<<endl;
}