社区讨论

结构体和lower_bound

灌水区参与者 3已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@m0113w4d
此快照首次捕获于
2024/08/19 21:25
2 年前
此快照最后确认于
2025/11/04 23:01
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
template<typename T>void re(T&x){x = 0; int sign = 1; char c; do{c = getchar(); if (c == '-') sign = -1;}while(!isdigit(c));do{x = x * 10 + c - '0'; c = getchar();}while(isdigit(c)); x *= sign;}
void write(int x){if (x < 0) putchar('-'); else if (x < 10) putchar(x + '0'); else write(x / 10), putchar(x % 10 + '0');}
struct node{int id, val;}a[3000000];
int n;
bool cmp(node x, node y){
	return x.val < y.val;
}
int main(){
	re(n);
	for (int i = 1, x; i <= n; i ++){re(a[i].val), a[i].id = i;}
	sort(a + 1, a + 1 + n, cmp);
	int m;
	re(m);
	while (m --){
		int x; re(x);
		auto it = lower_bound(a + 1, a + 1 + n, x);
		if (it == a + 1 + n) puts("-1");
		else printf("%d\n", it -> id);
	}
	return 0;
}
这代码是错误的,我想按照关键字 valval 进行二分, 有什么办法吗

回复

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

正在加载回复...