区间修改求最大值:C++暴力与差分数组实现对比
根据问题描述,这是一个典型的区间更新并求最大值的问题。由于n和q最大为99,数据量很小,可以直接使用差分数组或暴力遍历来解决。这里提供两种C++解法。 ## 解法一:直接模拟(暴力遍历) 对每次打扫,遍历区间 `[Li, Ri]` 并将对应区域加上 `xi`,最后找出最大值。 ```cpp #include <iostream> using namespace std; int main() { int n, q; cin >> n >> q; int clean[100] = {0}; // 区域干净度数组,索引1到n for (int i = 0; i < q; i++) { int L, R, x; cin >> L >> R >> x; for (int j = L; j <= R; j++) { clean[j] += x; } } int maxClean = 0; for (int i = 1; i <= n; i++) { if (clean[i] > maxClean) { maxClean = clean[i]; } } cout << maxClean << endl; return 0; } ``` ## 解法二:差分数组优化 先构建差分数组,完成所有区间更新后,再前缀和还原每个区域的干净度,最后找最大值。 ```cpp #include <iostream> using namespace std; int main() { int n, q; cin >> n >> q; int diff[101] = {0}; // 差分数组,多一个位置用于边界处理 for (int i = 0; i < q; i++) { int L, R, x; cin >> L >> R >> x; diff[L] += x; diff[R + 1] -= x; // 注意R+1可能等于n+1,但数组大小设为101足够 } int clean[100] = {0}; int maxClean = 0; for (int i = 1; i <= n; i++) { clean[i] = clean[i - 1] + diff[i]; if (clean[i] > maxClean) { maxClean = clean[i]; } } cout << maxClean << endl; return 0; } ``` ## 代码解析 **解法一**: - 使用一个数组 `clean` 记录每个区域的干净度。 - 对每次打扫,用循环将 `[Li, Ri]` 范围内的每个元素增加 `xi`。 - 时间复杂度为 O(q * n),对于 n<=99 完全足够。 - 空间复杂度 O(n)。 **解法二**: - 使用差分数组 `diff`,区间更新时只需修改两个位置:`diff[L] += x` 和 `diff[R+1] -= x`。 - 所有更新完成后,通过前缀和 `clean[i] = clean[i-1] + diff[i]` 还原真实值。 - 时间复杂度为 O(q + n),更高效。 - 注意差分数组需要多开一个位置,防止越界。 两种解法均能正确输出结果,对于本题输入样例输出为 `3`。 ######[AI问答 | 704点数解答 | 2026-08-09 10:09:44]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)436
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)323
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)324
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)312
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)558
- 地下水及地基土腐蚀性分析:从代码优化到逻辑完善的全面攻略(DeepSeek | 498点数解答 | 2025-06-08 21:49:49)273
- 礼盒多级排序:总价→最贵→最便宜→编号的 Python 实现与详解(阿里通义 | 1000点数解答 | 2026-03-16 12:13:21)98
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)91
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)473
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)441
- C语言巧解:计算整数区间内最遥远素数差值(阿里通义 | 428点数解答 | 2024-11-22 14:53:33)222
- C++ 实现:根据给定序列与条件计算满足要求的整数对数量(字节豆包 | 232点数解答 | 2025-04-23 17:33:20)206