关于upper_bound
  • 板块学术版
  • 楼主_Ventus_
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/7/26 11:02
  • 上次更新2023/11/3 07:36:36
查看原帖
关于upper_bound
506225
_Ventus_楼主2023/7/26 11:02
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N], f[N], f1[N];
int main() {
	int n = 0;
	while (scanf("%d", &a[++n]) != EOF);
	n--, f[1] = f1[1] = a[1];
	int num = 1, num1 = 1;
	for(int i = 2; i <= n; i++){
		int tmp;
		if (a[i] <= f[num]) f[++num] = a[i];
		else { tmp = upper_bound(f + 1, f + num + 1, a[i], greater<int> ()) - f;  f[tmp] = a[i]; }
		if (a[i] > f1[num1]) f1[++num1] = a[i];
		else { tmp = lower_bound(f1 + 1, f1 + num1 + 1, a[i]) - f1; f1[tmp] = a[i]; }
	}
	printf("%d\n%d\n", num, num1);
	return 0;
}

这是一份P1020 [NOIP1999 普及组] 导弹拦截的代码。在其中,我使用了upper_bound(f + 1, f + num + 1, a[i], greater<int> ()),但使用C++14编译时错误,并返回错误:‘greater’在此作用域中尚未声明以及错误:expected primary-expression before ‘int’,但使用C++17以及C++20 编译时通过了,请问是为什么?

2023/7/26 11:02
加载中...