差分数组与区间累加查询的C++高效实现详解
## 📝 问题解析 需要处理区间累加操作和区间求和查询,n<100,q和x规模未明确,但可用**差分数组**将O(nq)优化为O(q+n),再通过前缀和快速回答单次查询。 ## 💻 C++ 实现 ```cpp #include <bits/stdc++.h> using namespace std; int main() { int n, q; cin >> n >> q; vector<long long> diff(n + 2, 0); // 差分数组,下标从1到n+1 while (q--) { int L, R; long long x; cin >> L >> R >> x; diff[L] += x; diff[R + 1] -= x; } // 还原每朵花的浇水次数 vector<long long> cnt(n + 1, 0); for (int i = 1; i <= n; ++i) { cnt[i] = cnt[i - 1] + diff[i]; } // 前缀和数组,便于区间求和 vector<long long> pre(n + 1, 0); for (int i = 1; i <= n; ++i) { pre[i] = pre[i - 1] + cnt[i]; } int b, y; cin >> b >> y; cout << pre[y] - pre[b - 1] << '\n'; return 0; } ``` ## 🔍 代码说明 - 差分数组`diff`记录区间增量,`diff[L] += x, diff[R+1] -= x`。 - 对差分数组求前缀和得到每朵花的浇水次数`cnt[i]`。 - 再对`cnt`求前缀和`pre`,即可O(1)回答`[b, y]`区间和。 - 注意使用`long long`防止溢出。 ## 🧪 示例验证 输入: ``` 5 2 1 3 2 2 4 1 2 4 ``` 过程: - 第一轮:1~3加2 - 第二轮:2~4加1 - 每朵花次数:2, 3, 3, 1, 0 - 查询2~4:3+3+1=7 输出:`7` ######[AI问答 | 541点数解答 | 2026-08-02 15:43:08]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)430
- 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
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)550
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)335
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)235
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)505
- 单线程频繁查ClickHouse致CPU飙升?这些优化方案速看!(DeepSeek | 491点数解答 | 2025-02-13 17:49:54)288
- MySQL:巧用 NOT LIKE 查询字段不包含特定字符串及注意要点 (DeepSeek | 264点数解答 | 2025-02-13 18:25:01)238
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)85
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)467