基于前缀和的高效区间求和算法C++实现
## 💡 解题思路 这是一个典型的**前缀和(Prefix Sum)**问题。直接对每个询问暴力求和,复杂度为 O(n*m),在 n、m 均为 100000 时会超时。 用前缀和数组 pre[i] 表示前 i 个元素的战斗力之和,那么区间 [L, R] 的和等于 pre[R] - pre[L-1]。预处理 O(n),每次查询 O(1),总复杂度 O(n+m),完全可行。 ## 🧠 算法步骤 1. 读入 n、m 和数组 a[1..n]。 2. 构建前缀和数组 pre[0]=0,pre[i]=pre[i-1]+a[i]。 3. 对每个询问 (L, R),输出 pre[R] - pre[L-1]。 ## 💻 C++ 代码实现 ```cpp #include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<int> a(n + 1); vector<long long> pre(n + 1, 0); // 前缀和可能会超过 int 范围(最大1000*100000=1e8,但在100000*1000=1e8内,int够用,但用long long更安全) for (int i = 1; i <= n; i++) { cin >> a[i]; pre[i] = pre[i - 1] + a[i]; } while (m--) { int L, R; cin >> L >> R; cout << pre[R] - pre[L - 1] << '\n'; } return 0; } ``` ## ⚠️ 开发注意要点 - 使用 `ios::sync_with_stdio(false)` 和 `cin.tie(nullptr)` 加速输入输出,否则大数据量可能超时。 - 前缀和数组建议用 `long long`,虽然本题数据范围 int 足够,但这是通用安全写法。 - 数组下标从 1 开始,便于处理 pre[L-1],避免边界判断。 - 输出用 `'\n'` 而不是 `endl`,减少刷新缓冲区的开销。 ######[AI问答 | 515点数解答 | 2026-08-29 21:20:00]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)448
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)333
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)338
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)322
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)571
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)254
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)484
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)452
- C语言巧解:计算整数区间内最遥远素数差值(阿里通义 | 428点数解答 | 2024-11-22 14:53:33)228
- C++ 实现:根据给定序列与条件计算满足要求的整数对数量(字节豆包 | 232点数解答 | 2025-04-23 17:33:20)212
- C++ 求解满足特定条件整数对数量:从 O(M^2) 到 O(N + M) 的优化(百度文心 | 1197点数解答 | 2025-04-23 17:36:27)291
- Python切片操作巧解经典算法:二维数组90°旋转(阿里通义 | 205点数解答 | 2023-10-31 11:05:29)406