关于upper_bound()函数
  • 板块学术版
  • 楼主HXR123
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/7/4 15:13
  • 上次更新2023/11/3 11:38:54
查看原帖
关于upper_bound()函数
393699
HXR123楼主2023/7/4 15:13

用upper_bound()直接代替二分的错误在哪里?大佬能否解答一下。
例如:P1439

#include<bits/stdc++.h>
using namespace std;
int n,c[10000001],d[10000001];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		c[x]=i;
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		if(c[x]>d[ans])
		{
			ans++;
			d[ans]=c[x];
		}
		else
		{
			d[upper_bound(d+1,d+1+ans,x)-d]=c[x];
		}
	}
	printf("%d",ans);
	return 0;
}

使用d[upper_bound(d+1,d+1+ans,x)-d]=c[x];有错误, 但用二分替代后就对了

int l=1,r=ans;
			while(l<r)
			{
				int mid=(l+r)/2;
				if(d[mid]>c[x])r=mid;
				else l=mid+1;
			}
			d[l]=c[x];
2023/7/4 15:13
加载中...