真正的空间最小(比上面那个少2MB内存)
2026-07-25 15:30:03
发布于:河南
34阅读
0回复
0点赞
#include <cstdio>
// 精确设置数组大小:题目中r最大为200000,所以r+1最大为200001
const int MAXN = 200001;
int main() {
int n, k, q;
// 使用scanf替代cin,减少IO缓冲区内存
scanf("%d%d%d", &n, &k, &q);
int d[MAXN + 1] = {0};
// 构建差分数组
for (int i = 0; i < n; ++i) {
int l, r;
scanf("%d%d", &l, &r);
d[l]++;
d[r + 1]--;
}
// 复用差分数组空间,直接计算前缀和
int cnt = 0;
for (int i = 1; i < n+2; ++i) {
cnt += d[i];
// 存储前缀和:d[i]表示[1,i]中满足条件的位置数量
d[i] = d[i - 1] + (cnt >= k ? 1 : 0);
}
// 处理查询
for (int i = 0; i < q; ++i) {
int l, r;
scanf("%d%d", &l, &r);
// 输出结果:d[r] - d[l-1]
printf("%d\n", d[r] - d[l - 1]);
}
return 0;
}
这里空空如也





有帮助,赞一个