酷代码 AI
菜单
服务商

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

以下是解决该问题的C++代码: ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, q; // 读取区域的数量n和打扫次数q cin >> n >> q; // 用于存储每个区域的干净度,初始值都为0 vector<int> cleanliness(n + 1, 0); // 进行q次打扫操作 for (int i = 0; i < q; i++) { int Li, Ri, xi; // 读取每次打扫的范围和干净度增加的值 cin >> Li >> Ri >> xi; for (int j = Li; j <= Ri; j++) { // 对指定范围内的区域干净度加上xi cleanliness[j] += xi; } } // 找出最干净的区域的干净度 int maxCleanliness = *max_element(cleanliness.begin() + 1, cleanliness.end()); // 输出结果 cout << maxCleanliness << endl; return 0; } ``` 代码解释: 1. 输入读取:首先读取区域的数量`n`和打扫次数`q`。 2. 初始化干净度数组:使用`vector<int> cleanliness(n + 1, 0)`创建一个长度为`n + 1`的数组,用于存储每个区域的干净度,初始值都为0。 3. 进行打扫操作:通过循环`q`次,每次读取打扫的范围`Li`、`Ri`和干净度增加的值`xi`,然后将指定范围内的区域干净度加上`xi`。 4. 找出最大干净度:使用`*max_element(cleanliness.begin() + 1, cleanliness.end())`找出数组中最大的干净度值。 5. 输出结果:将最大干净度值输出。 复杂度分析: - 时间复杂度:$O(q * (R - L + 1))$,其中$q$是打扫次数,$R - L + 1$是每次打扫的区域范围。 - 空间复杂度:$O(n)$,主要用于存储每个区域的干净度。 [2026-01-09 20:20:34 | AI问答 | 512点数解答]

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