题解 | 【模板】整数域二分
【模板】整数域二分
https://www.nowcoder.com/practice/d483ab6bf19245518730a75c6ea108ae
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n, p;//n是数组数量,p是操作次数
scanf("%d%d", &n, &p);
vector<int> arr(n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
sort(arr.begin(), arr.end());
for (int i = 0; i < p; i++) {
int start, end;
scanf("%d%d", &start, &end);
// 二分查找:找第一个>=start的位置,第一个>end的位置
auto left = lower_bound(arr.begin(), arr.end(), start);
auto right = upper_bound(arr.begin(), arr.end(), end);
// 差值就是区间内元素数量
printf("%d\n", (int)(right - left));
}
}
查看10道真题和解析