区间加法后求最大干净度——C++差分与暴力解法
好的,这个问题本质上是多次区间加法后,求单点最大值。根据题目条件(`n <= 99`,`q` 未给出上限但总体很小),最简单的方案是用一个数组模拟每次加操作。 也可以用差分数组来加速运算,避免每次区间都循环。下面给出两种实现和对应注释。 --- ## 方法一:暴力模拟 每次操作直接用循环遍历 `[Li, Ri]` 区间,给每个位置增加 `Xi`。 最后用 `max` 找到最大值。 ```cpp #include <bits/stdc++.h> using namespace std; int main() { int n, q; cin >> n >> q; vector<int> clean(n + 1, 0); // 下标从1开始 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 ans = *max_element(clean.begin() + 1, clean.end()); // 从1到n找最大 cout << ans << endl; return 0; } ``` 复杂度:**O(n × q)** 当 n = 99,q 即使达到几千也很快。 --- ## 方法二:差分数组优化 差分可以在 **O(n + q)** 时间内完成全部区间加法。 思路: - 差分数组 `diff`,`diff[L] += X`,`diff[R+1] -= X`。 - 最后求一次前缀和得到每个位置的干净度,同时记录最大值。 ```cpp #include <bits/stdc++.h> using namespace std; int main() { int n, q; cin >> n >> q; vector<int> diff(n + 2, 0); // 多开一位,防止R+1越界 for (int i = 0; i < q; ++i) { int L, R, X; cin >> L >> R >> X; diff[L] += X; diff[R + 1] -= X; } int ans = 0, cur = 0; for (int i = 1; i <= n; ++i) { cur += diff[i]; if (cur > ans) ans = cur; } cout << ans << endl; return 0; } ``` 复杂度:**O(n + q)**,只做了两次线性扫描。 --- 📌 **提示**: - 注意差分数组要 `+1` 的偏移,防止 R 到达 n 时越界。 - 输入范围很小,方法一完全可以接受;若 n 更大(如 10^5),必须使用方法二。 ######[AI问答 | 628点数解答 | 2026-05-14 18:48:37]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)376
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)262
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)270
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)261
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)61
- UWP应用:实现两整数相加功能的代码示例(字节豆包 | 755点数解答 | 2024-09-27 13:28:26)206
- C 语言实现一元稀疏多项式 a=3x^14+2x^8+1 与 b=8x^14–3x^10+10x^6 的表示及基本操作(字节豆包 | 1615点数解答 | 2024-10-18 17:19:15)253
- C 语言:链表实现一元稀疏多项式的建立、销毁、输出及加减运算(字节豆包 | 1939点数解答 | 2024-10-18 17:30:58)239
- C 语言实现:随机式子驱动一元稀疏多项式建立、销毁、运算全解析(字节豆包 | 1842点数解答 | 2024-10-29 08:45:36)186
- C 语言实现一元稀疏多项式:建立、销毁、输出及加减运算全解析(字节豆包 | 1832点数解答 | 2024-10-29 08:49:08)249
- Python 实现:乘法与加法口诀表输出及关键逻辑解析(字节豆包 | 412点数解答 | 2025-06-24 09:55:02)94
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)400