只能过#1#2求助(附#3数据)
查看原帖
只能过#1#2求助(附#3数据)
216352
SUPERLWR楼主2022/7/29 15:48
#include<bits/stdc++.h>
#define maxn 100000
#define int long long
using namespace std;
int n,a[maxn+5],b[maxn+5],mp[maxn+5],dp[maxn+5],fin[maxn+5];
int len;
int find(int x)
{
	int l=1,r=len,mid;
	while(l<r)
	{
		mid=(l+r)>>1;
		if(dp[mid]>x)
			r=mid-1;
		else
			l=mid+1;
	}
	return l;
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=n;i++)
		cin>>b[i];
	for(int i=1;i<=n;i++)
		mp[a[i]]=i;
	for(int i=1;i<=n;i++)
		fin[i]=mp[b[i]];
	dp[1]=fin[1];
	len=1;
	for(int i=2;i<=n;i++)
	{
		if(fin[i]>dp[len])
			dp[++len]=fin[i];
		else
			dp[find(fin[i])]=fin[i];
	}
	cout<<len;
	return 0;
}
2022/7/29 15:48
加载中...