酷代码 AI
菜单

庭院里一共有n(n<=99)个区域排成一列,都需要打扫。核晶宝贝可以使用特殊能力进行快速打扫。第i次打扫时,可以把从Li到Ri这连续的一段区域的干净度集体加xi。球球希望经过q次打扫之后,找出最干净的区域的干净度是多少,一开始所有区域的干净度为0。 输入: 第一行两个数n和q代表区域的数和打扫次数。 接下来q行,每行三个数Li,Ri和Xi,表示每次打扫的范围和干净度增加的值。c++

以下是解决该问题的 C++ 代码: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, q; // 输入区域的数量和打扫次数 cin >> n >> q; // 初始化每个区域的干净度为 0 vector<int> cleanliness(n + 1, 0); for (int i = 0; i < q; i++) { int l, r, x; // 输入每次打扫的范围和干净度增加的值 cin >> l >> r >> x; // 对区间 [l, r] 进行标记,这里采用差分数组的思想 cleanliness[l] += x; if (r + 1 <= n) { cleanliness[r + 1] -= x; } } int maxCleanliness = 0; int currentCleanliness = 0; // 通过累加差分数组还原每个区域的干净度 for (int i = 1; i <= n; i++) { currentCleanliness += cleanliness[i]; // 更新最大干净度 if (currentCleanliness > maxCleanliness) { maxCleanliness = currentCleanliness; } } // 输出最干净区域的干净度 cout << maxCleanliness << endl; return 0; } ``` 代码说明: 1. 输入处理:首先读取区域的数量 `n` 和打扫次数 `q`,然后使用 `vector<int> cleanliness(n + 1, 0)` 初始化每个区域的干净度为 0。 2. 差分数组标记:对于每次打扫操作,读取范围 `[l, r]` 和干净度增加的值 `x`,将 `cleanliness[l]` 加上 `x`,如果 `r + 1 <= n`,则将 `cleanliness[r + 1]` 减去 `x`。这样通过差分数组可以高效地记录每个区间的变化。 3. 还原干净度并计算最大值:通过累加差分数组 `cleanliness`,还原每个区域的干净度,并更新最大干净度 `maxCleanliness`。 4. 输出结果:最后输出最干净区域的干净度。 复杂度分析: - 时间复杂度:$O(n + q)$,其中 $n$ 是区域的数量,$q$ 是打扫的次数。 - 空间复杂度:$O(n)$,主要用于存储差分数组。 [2026-01-24 19:23:27 | AI问答 | 579点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多