upper_bound使用时遇到的小问题求助
  • 板块学术版
  • 楼主a1589255859
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/3/21 12:32
  • 上次更新2023/11/5 01:47:40
查看原帖
upper_bound使用时遇到的小问题求助
95780
a1589255859楼主2021/3/21 12:32

这是p1439

修改前代码 RE3个点

#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005],d[100005],len,n;
int main()
{
	cin>>n;
	for(register int i=1;i<=n;++i){scanf("%d",&a[i]);c[a[i]]=i;}
	for(register int i=1;i<=n;++i){scanf("%d",&b[i]);b[i]=c[b[i]];}
	d[1]=b[1];len=1;
	for(register int i=2;i<=n;++i)
	{
		if(b[i]>d[len])d[++len]=b[i];
		else *upper_bound(d+1,d+len+1,b[i])=b[i];
	}
	cout<<len<<endl;
	return 0;
}

修改后代码 AC

#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005],d[100005],len,n;
int main()
{
	cin>>n;
	for(register int i=1;i<=n;++i){scanf("%d",&a[i]);c[a[i]]=i;}
	for(register int i=1;i<=n;++i){scanf("%d",&b[i]);b[i]=c[b[i]];}
	d[1]=b[1];len=1;
	for(register int i=2;i<=n;++i)
	{
		if(b[i]>d[len])d[++len]=b[i];
		else d[upper_bound(d+1,d+len+1,b[i])-d]=b[i];
	}
	cout<<len<<endl;
	return 0;
}

其中只改了一处

else *upper_bound(d+1,d+len+1,b[i])=b[i];

改为

else d[upper_bound(d+1,d+len+1,b[i])-d]=b[i];

然而我在做p1020导弹拦截的时候 使用上面一种并没有出错

求大佬解惑 二者有什么区别 为什么会RE

感谢

2021/3/21 12:32
加载中...