[IOI2021] 分糖果

题目背景

# 滥用本题评测将被封号 ### 由于技术限制,请不要使用 C++ 14 (GCC 9) 提交本题。 这是一道交互题,你只需要实现代码中要求的函数。 你的代码不需要引用任何额外的头文件,也不需要实现 `main` 函数。

题目描述

Khong 阿姨正在给附近一所学校的学生准备 $n$ 盒糖果。盒子的编号分别为 $0$ 到 $n - 1$,开始时盒子都为空。第 $i$ 个盒子 $(0 \leq i \leq n - 1)$ 至多可以容纳 $c[i]$ 块糖果(容量为 $c[i]$)。 Khong 阿姨花了 $q$ 天时间准备糖果盒。在第 $j$ 天 $(0 \leq j \leq q - 1)$,她根据三个整数 $l[j]$、 $r[j]$ 和 $v[j]$ 执行操作,其中 $0 \leq l[j] \leq r[j] \leq n - 1$ 且 $v[j] \neq 0$。对于每个编号满足 $l[j] \leq k \leq r[j]$ 的盒子 $k$: - 如果 $v[j] > 0$,Khong 阿姨将糖果一块接一块地放入第 $k$ 个盒子,直到她正好放了 $v[j]$ 块糖果或者该盒子已满。也就是说,如果该盒子在这次操作之前已有 $p$ 块糖果,那么在这次操作之后盒子将有 $\min(c[k], p + v[j])$ 块糖果。 - 如果 $v[j] < 0$,Khong 阿姨将糖果一块接一块地从第 $k$ 个盒子取出,直到她正好从盒子中取出 $-v[j]$ 块糖果或者该盒子已空。也就是说,如果该盒子在这次操作之前已有 $p$ 块糖果,那么在这次操作之后盒子将有 $\max(0, p + v[j])$ 块糖果。 你的任务是求出 $q$ 天之后每个盒子中糖果的数量。

输入输出格式

输入格式


**实现细节** 你要实现以下函数: ```cpp std::vector<int> distribute_candies( std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> v) ``` - $c$:一个长度为 $n$ 的数组。 对于 $0 \leq i \leq n - 1$, $c[i]$ 表示盒子 $i$ 的容量。 - $l$、 $r$ 和 $v$:三个长度为 $q$ 的数组。 在第 $j$ 天, 对于 $0 \leq j \leq q - 1$,Khong 阿姨执行由整数 $l[j]$、 $r[j]$ 和 $v[j]$ 决定的操作,如题面所述。

输出格式


- 该函数应该返回一个长度为 $n$ 的数组。用 $s$ 表示这个数组。 对于 $0 \leq i \leq n - 1$, $s[i]$ 应为 $q$ 天以后盒子 $i$ 中的糖果数量。

输入输出样例

输入样例 #1

3
10 15 13
2
0 2 20
0 1 -11

输出样例 #1

0 4 13

说明

**例 1** 考虑如下调⽤: `distribute_candies([10, 15, 13], [0, 0], [2, 1], [20, -11])` 这表示盒子 $0$ 的容量为 $10$ 块糖果,盒子 $1$ 的容量为 $15$ 块糖果,盒子 $2$ 的容量为 $13$ 块糖果。 在第 $0$ 天结束时,盒子 $0$ 有 $\min(c[0], 0 + v[0]) = 10$ 块糖果,盒子 $1$ 有 $\min(c[1], 0 + v[0]) = 15$ 块糖果,盒子 2 有 $\min(c[2], 0 + v[0]) = 13$ 块糖果。 在第 $1$ 天结束时,盒子 $0$ 有 $\max(0, 10 + v[1]) = 0$ 块糖果,盒子 $1$ 有 $\max(0, 15 + v[1]) = 4$ 块糖果。因为 $2 > r[1]$,盒子 $2$ 中的糖果数量没有变化。每一天结束时糖果的数量总结如下: | 天 | 盒子 $0$ | 盒子 $1$ | 盒子 $2$ | | :----------: | :----------: | :----------: | :----------: | | $0$ | $10$ | $15$ | $13$ | | $1$ | $0$ | $4$ | $13$ | 就此情况,函数应该返回 $[0, 4, 13]$。 **约束条件** - $1 \le n \le 200 000$ - $1 \le q \le 200 000$ - $1 \le c[i] \le 10 ^ 9$ (对所有 $0 \le i \le n - 1$) - $0 \le l[j] \le r[j] \le n - 1$(对所有 $0 \le j \le q - 1$) - $−10 ^ 9 \le v[j] \le 10 ^ 9$ , $v[j] ≠ 0$(对所有 $0 \le j \le q - 1$) **子任务** 1. ($3$ 分) $n, q \leq 2000$ 2. ($8$ 分) $v[j] > 0$(对所有 $0 \le j \le q - 1$) 3. ($27$ 分) $c[0] = c[1] = \cdots = c[n - 1]$ 4. ($29$ 分) $l[j] = 0$ 和 $r[j] = n - 1$(对所有 $0 \leq j \leq q - 1$) 5. ($33$ 分) 没有额外的约束条件。 **评测程序示例** 评测程序示例读入如下格式的输入: - 第 $1$ 行: $n$ - 第 $2$ 行: $c[0] ~ c[1] ~ \cdots ~ c[n - 1]$ - 第 $3$ 行: $q$ - 第 $4 + j$ 行 ( $0 \leq j \leq q - 1$): $l[j] ~ r[j] ~ v[j]$ 评测程序示例按照以下格式打印你的答案: 第 $1$ 行: $s[0] ~ s[1] ~ \cdots ~ s[n - 1]$