20分求助
查看原帖
20分求助
616964
Adolfo_North楼主2022/8/8 07:56
#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;
}

求助大佬

2022/8/8 07:56
加载中...