在线求助
查看原帖
在线求助
359111
kxbb楼主2022/9/11 18:43
#include<bits/stdc++.h>
using namespace std;
int const N = 100010;
int main()
{
	int en,mid;
	int n;
	int a[N];
	int b[N];
	cin>>n;
	for(int i=0;i<n;i++)	scanf("%d",&a[i]);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&b[i]);
		for(int j=0;j<n;j++)//离散化 
		{
			if(a[j]==b[i])
			{
				b[i]=j+1;
				break;
			}
		}	
	}
	int u[N]={};
	memset(u,0,sizeof(u));
	for(int i=0;i<n;i++)//求最长上升子序列 
	{
		if(!en||u[en]<b[i])
		{
			en++;
			u[en]=b[i];
		}
		else
		{
			mid=lower_bound(u+1,u+1+en,b[i])-u;
			u[mid]=b[i];
		}
//		cout<<mid<<" "<<f[i]<<endl;
//		for(int i=0;i<=en+3;i++)	cout<<u[i]<<" ";
//		cout<<endl;
	}		
	cout<<en<<endl;
	return 0;
}

60分,思路:离散化然后求最长上升

2022/9/11 18:43
加载中...