- #include<iostream>
- #include<cstdio>
- using namespace std;
- int a[100001], b[100001], map[100001], pos[100001];
- int main(){
- int n;
- cin>>n;
- for(int i=1; i<=n; i++){
- scanf("%d",&a[i]);
- map[a[i]]=i;
- }
- for(int i=1; i<=n; i++){
- scanf("%d",&b[i]);
- pos[i]=0x7fffffff;
- }
- int len=0;
- pos[0]=0;
- for(int i=1; i<=n; i++){
- int l=0, r=len, mid;
- if(map[b[i]]>pos[len]) pos[++len]=map[b[i]];
- else{
- while(l<r){
- mid=(l+r)/2;
- if(pos[mid]>map[b[i]] ) r=mid;
- else l=mid+1;
- }
- pos[l]=min(map[b[i]], pos[l]);
- }
- }
- cout<<len<<endl;
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2691936.html