社区讨论

关于upper_bound

学术版参与者 4已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lo2385ye
此快照首次捕获于
2023/10/23 07:16
2 年前
此快照最后确认于
2023/11/03 07:36
2 年前
查看原帖
CPP
#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 编译时通过了,请问是为什么?

回复

10 条回复,欢迎继续交流。

正在加载回复...