C++实现区间更新并找出最大值的高效方法
以下是针对该问题的分析与修正后的代码: ### 错误分析 在原问题描述中未给出错误代码,不过此问题的关键在于处理区间更新及找出最终数组中的最大值。一般而言,若直接对区间 `[L, R]` 内的每个元素都加上 `K`,时间复杂度会达到 $O(q * n)$,在 `n` 和 `q` 较大时效率不高。可以运用差分的方法,把区间更新的时间复杂度优化到 $O(1)$,最后再通过前缀和恢复原数组,找出最大值。 ### 修正后的代码 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, q; // 输入 n 和 q cin >> n >> q; // 存储原始数组 vector<int> a(n + 1, 0); // 存储差分数组 vector<int> diff(n + 2, 0); // 输入 n 个正整数 for (int i = 1; i <= n; ++i) { cin >> a[i]; // 初始化差分数组 diff[i] = a[i] - a[i - 1]; } // 进行 q 次操作 for (int i = 0; i < q; ++i) { int L, R, K; cin >> L >> R >> K; // 对差分数组进行区间更新 diff[L] += K; diff[R + 1] -= K; } // 通过前缀和恢复原数组 for (int i = 1; i <= n; ++i) { a[i] = a[i - 1] + diff[i]; } // 找出数组中的最大值 int max_val = *max_element(a.begin() + 1, a.end()); // 输出最大值 cout << max_val << endl; return 0; } ``` ### 代码解释 1. **输入处理**:先输入 `n` 和 `q`,接着输入 `n` 个正整数,同时初始化差分数组 `diff`。 2. **区间更新**:在每次操作中,输入 `L`、`R` 和 `K`,对差分数组 `diff` 进行更新,`diff[L] += K` 表示从 `L` 开始加上 `K`,`diff[R + 1] -= K` 表示在 `R + 1` 处减去 `K`,以此保证只在 `[L, R]` 区间内加上 `K`。 3. **恢复原数组**:利用前缀和的方法,通过 `a[i] = a[i - 1] + diff[i]` 恢复原数组。 4. **找出最大值**:使用 `*max_element` 函数找出数组中的最大值并输出。 ### 复杂度分析 - **时间复杂度**:$O(n + q)$,其中 `n` 是数组的长度,`q` 是操作的次数。 - **空间复杂度**:$O(n)$,主要用于存储原数组和差分数组。 ######[AI问答 | 751点数解答 | 2026-03-20 19:57:04]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)350
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)240
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)248
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)240
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)321
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)292
- 动态规划求解数组下标元素和最大值代码分析与优化(字节豆包 | 346点数解答 | 2026-03-16 17:56:30)14
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)342
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)541
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)162
- 地下水及地基土腐蚀性分析:从代码优化到逻辑完善的全面攻略(DeepSeek | 498点数解答 | 2025-06-08 21:49:49)226
- 礼盒多级排序:总价→最贵→最便宜→编号的 Python 实现与详解(阿里通义 | 1000点数解答 | 2026-03-16 12:13:21)8