C++差分数组高效解决区间累加问题
这个问题是一个典型的差分数组(Difference Array)或前缀和(Prefix Sum)的应用场景。每轮浇水相当于对区间 `[L, R]` 内所有元素加 1,最后需要输出每个位置的累计值。 直接使用暴力累加(每轮遍历区间)在 q 和 n 较大时会超时,因此用差分数组优化到 O(n + q) 时间复杂度。 以下是 C++ 代码实现,包含详细 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, q; cin >> n >> q; // 差分数组,大小 n+2,避免边界溢出 vector<int> diff(n + 2, 0); // 处理 q 轮浇水 for (int i = 0; i < q; i++) { int L, R; cin >> L >> R; // 差分操作:左端点加 1,右端点后一位减 1 diff[L] += 1; diff[R + 1] -= 1; } // 通过前缀和还原每一朵花的浇水次数 vector<int> result(n + 1, 0); for (int i = 1; i <= n; i++) { result[i] = result[i - 1] + diff[i]; } // 输出结果,用空格隔开 for (int i = 1; i <= n; i++) { if (i > 1) cout << " "; cout << result[i]; } cout << endl; return 0; } ``` ✅ **代码要点说明** - `diff` 数组长度设为 `n+2`,防止 `R+1` 越界。 - 差分操作:`diff[L]++` 表示从 L 开始累计增加,`diff[R+1]--` 表示到 R+1 处停止增加。 - 最终通过一次前缀和遍历,得到每个位置的实际浇水次数。 - 输入输出采用标准格式,支持多组测试(题目未明确,但代码可重复运行)。 **示例运行** 输入: ``` 5 3 1 3 2 4 3 5 ``` 输出: ``` 1 2 3 2 1 ``` (每朵花依次被浇 1, 2, 3, 2, 1 次) ######[AI问答 | 547点数解答 | 2026-08-02 15:11:50]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)429
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)317
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)317
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)306
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)235
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)215
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)247
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)85
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)437
- C语言巧解:计算整数区间内最遥远素数差值(阿里通义 | 428点数解答 | 2024-11-22 14:53:33)217
- C++ 实现:根据给定序列与条件计算满足要求的整数对数量(字节豆包 | 232点数解答 | 2025-04-23 17:33:20)201
- C++ 求解满足特定条件整数对数量:从 O(M^2) 到 O(N + M) 的优化(百度文心 | 1197点数解答 | 2025-04-23 17:36:27)281