C++ 实现序列区间查询:计算以 l 开头子区间总和及注意要点
```cpp #include <iostream> #include <vector> using namespace std; // 计算以 l 开头,到 r 结束的所有子区间的总和 long long calculateSum(const vector<int>& arr, int l, int r) { long long result = 0; // 遍历从 l 到 r 的每个可能的子区间 for (int end = l; end <= r; ++end) { // 计算当前子区间 [l, end] 的和 for (int i = l; i <= end; ++i) { result += arr[i - 1]; // 数组下标从 0 开始,所以要减 1 } } return result; } int main() { int n, q; cin >> n >> q; vector<int> arr(n); // 读取序列 for (int i = 0; i < n; ++i) { cin >> arr[i]; } // 处理每次询问 for (int i = 0; i < q; ++i) { int l, r; cin >> l >> r; // 计算并输出结果 cout << calculateSum(arr, l, r) << endl; } return 0; } ``` 代码解释: 1. `calculateSum` 函数用于计算以 `l` 开头,到 `r` 结束的所有子区间的总和。通过两层循环,外层循环控制子区间的结束位置,内层循环计算当前子区间的和。 2. `main` 函数首先读取序列的长度 `n` 和询问的次数 `q`,然后读取序列中的元素。接着处理每次询问,读取询问的区间 `[l, r]`,调用 `calculateSum` 函数计算结果并输出。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 数组下标从 0 开始,而输入的区间 `[l, r]` 是从 1 开始计数的,所以在访问数组元素时要注意下标减 1。 2. 由于结果可能会很大,需要使用 `long long` 类型来存储总和,避免整数溢出。 3. 对于大规模数据,这种暴力计算的方法时间复杂度较高,可能会超时,需要考虑使用更高效的算法。 ######[AI写代码神器 | 543点数解答 | 2025-11-05 19:59:56]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)351
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)241
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)249
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)241
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)54
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)182
- 求解整数序列操作最小次数:让前缀和之和等于后缀和之和(DeepSeek | 1329点数解答 | 2025-05-25 17:27:01)223
- C++求解:使整数序列前缀和之和等于后缀和之和的最小操作次数(DeepSeek | 532点数解答 | 2025-05-25 17:27:47)250
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)432
- 单线程频繁查ClickHouse致CPU飙升?这些优化方案速看!(DeepSeek | 491点数解答 | 2025-02-13 17:49:54)228
- MySQL:巧用 NOT LIKE 查询字段不包含特定字符串及注意要点 (DeepSeek | 264点数解答 | 2025-02-13 18:25:01)179