【正经题解】upper_bound
2024-03-18 16:46:03
发布于:浙江
17阅读
0回复
0点赞
上述代码实现了对给定整数序列的每个询问,输出大于询问数字的个数。使用二分查找找到序列中不小于询问数字的最小值的位置,然后计算大于询问数字的个数。
#include<bits/stdc++.h>
using namespace std;
int a[1000001], b[1000001], c[1000001];
int n;
// 计算大于等于 m 的数字的个数
int ans_tf(int m){
int le = 0, ri = n + 1;
while(le + 1 != ri){
int mid = (le + ri) / 2;
if(a[mid] <= m){
le = mid;
}
else{
ri = mid;
}
}
return n - ri + 1;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
sort(a + 1, a + n + 1);
int x;
cin >> x;
while(x--){
int t;
cin >> t;
cout << ans_tf(t) << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个