高效求解后缀和:C++实现与算法解析
## 🔍 问题解析 这是一个典型的后缀和(suffix sum)查询问题。需要快速回答 m 次询问,每次询问从位置 k 到 n 的区间和。若直接暴力求和,单次询问最坏 O(n),总复杂度 O(m*n) 会超时(n,m 最大 10^5)。 ## 💡 解题思路 预计算后缀和数组 `suf[i]`,表示从 i 到 n 的和。 `Suf[n+1] = 0`(方便边界) `Suf[i] = a[i] + suf[i+1]` 查询 k 时,直接输出 `suf[k]`,单次 O(1)。总复杂度 O(n+m),符合要求。 ## 🧩 算法步骤 1. 读取 n, m 和数组 a。 2. 从 n 到 1 倒序遍历,计算 `suf[i]`。 3. 对每个询问 k,输出 `suf[k]`。 ## 🛠️ C++ 代码实现 ```cpp #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<int> a(n + 1); for (int i = 1; i <= n; ++i) { cin >> a[i]; } vector<long long> suf(n + 2, 0); // 后缀和,索引从1到n+1 for (int i = n; i >= 1; --i) { suf[i] = suf[i + 1] + a[i]; } while (m--) { int k; cin >> k; cout << suf[k] << '\n'; } return 0; } ``` ## ✅ 复杂度分析 - 时间:O(n + m) - 空间:O(n) ## 📌 注意事项 - 使用 `long long` 存储和,因为 n 最大 10^5,a[i] 最大 1000,总和最大 10^8,int 足够,但用 long long 更保险。 - 用 `ios::sync_with_stdio(false)` 加速输入输出,避免超时。 ######[AI问答 | 528点数解答 | 2026-08-29 21:51:19]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)571
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)254
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)408
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)434
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)484
- Python切片操作巧解经典算法:二维数组90°旋转(阿里通义 | 205点数解答 | 2023-10-31 11:05:29)406
- 揭秘iOS开发:常用算法大集合,提升应用性能与体验!(阿里通义 | 246点数解答 | 2023-11-08 00:43:08)366
- 深入解析:Vue2.x与Vuex3.x渲染器的Diff算法奥秘(阿里通义 | 222点数解答 | 2023-11-09 01:35:41)431
- 突破 long 范围限制:用 BigInteger 类实现超大数字竖式乘法运算( | 555点数解答 | 2024-03-17 10:56:49)433
- 超范围数字乘法:字符串转数组+模拟竖式运算的实现攻略( | 377点数解答 | 2024-03-17 10:58:21)426
- Java 实现:突破 long 范围限制,模拟竖式运算处理大数字乘法( | 14点数解答 | 2024-03-17 10:58:39)405
- Java实现:突破long范围限制,模拟人工竖式运算大数字乘法( | 1022点数解答 | 2024-03-17 10:59:43)405