题目描述
注意:在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:
请在提交源代码前添加 #include "candies.h"
。
Khong 阿姨正在给附近一所学校的学生准备 n 盒糖果。盒子的编号分别为 0 到 n−1,开始时盒子都为空。第 i 个盒子(0≤i≤n−1)至多可以容纳 c[i] 块糖果(容量为 c[i])。
Khong 阿姨花了 q 天时间准备糖果盒。在第 j 天(0≤j≤q−1),她根据三个整数 l[j]、r[j] 和 v[j] 执行操作,其中 0≤l[j]≤r[j]≤n−1 且 v[j]=0。对于每个编号满足 l[j]≤k≤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 天之后每个盒子中糖果的数量。
实现细节
你要实现以下函数:
int[] distribute_candies(int[] c, int[] l, int[] r, int[] v)
- c:一个长度为 n 的数组。对于 0≤i≤n−1,c[i] 表示盒子 i 的容量。
- l、r 和 v:三个长度为 q 的数组。在第 j 天,对于 0≤j≤q−1,Khong 阿姨执行由整数 l[j]、r[j] 和 v[j] 决定的操作,如题面所述。
- 该函数应该返回一个长度为 n 的数组。用 s 表示这个数组。对于 0≤i≤n−1,s[i] 应为 q 天以后盒子 i 中的糖果数量。
评测程序示例
评测程序示例读入如下格式的输入:
- 第 1 行:n
- 第 2 行:c[0]c[1]…c[n−1]
- 第 3 行:q
- 第 4+j 行(0≤j≤q−1):l[j]r[j]v[j]
评测程序⽰例按照以下格式打印你的答案:
- 第 1 行:s[0]s[1]…s[n−1]
3
10 15 13
2
0 2 20
0 1 -11
0 4 13
数据范围与提示
对于所有数据:
- 1≤n≤200000
- 1≤q≤200000
- 1≤c[i]≤109(对所有 0≤i≤n−1)
- 0≤l[j]≤r[j]≤n−1(对所有 0≤j≤q−1)
- −109≤v[j]≤109,v[j]=0(对所有 0≤j≤q−1)
子任务 |
分值 |
特殊限制 |
1 |
3 |
n,q≤2000 |
2 |
8 |
v[j]>0(对所有 0≤j≤q−1) |
3 |
27 |
c[0]=c[1]=⋯=c[n−1] |
4 |
29 |
l[j]=0 和 r[j]=n−1(对所有 0≤j≤q−1) |
5 |
33 |
没有额外的约束条件 |