求dalao帮帮忙
查看原帖
求dalao帮帮忙
138299
paperghost_ls楼主2020/7/1 13:00

RT,想知道如果一个数列有重复的数应该怎么修改代码

如:

5

1 2 2 4 5

1 3 6 2 2

#include<cstdio>
#define ri register int
using namespace std;
int a[110000],p[110000];
int f[110000],len;
int check(int x)
{
	int l=1,r=len;
	while(l<r)
	{
		int mid=(l+r)>>1;
		if(p[f[mid]]>p[x])r=mid;
		else l=mid+1;
	}
	return l;
}
int main()
{
	int n;scanf("%d",&n);
	for(ri i=1;i<=n;i++)scanf("%d",&a[i]);
	for(ri i=1;i<=n;i++)
	{
		int x;scanf("%d",&x);
		p[x]=i;
	}
	for(ri i=1;i<=n;i++)
	{
		if(p[a[i]]>p[f[len]])f[++len]=a[i];
		else f[check(a[i])]=a[i];
	}
	printf("%d\n",len);
	return 0;
}
2020/7/1 13:00
加载中...