该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
本题使用文件输入输出:输入文件名为 array.in,输出文件名为 array.out。
若数组 a,S 长度均为 n,且对于所有 1≤i≤n,均满足 Si=a1+a2+⋯+ai,则数组 S 为数组 a 的前缀和数组。
小 D 有 n 个数组 A0,A1,⋯,An−1,长度均为 n。用 Ai,j 表示数组 Ai 的第 j 项。已知数组 A0 的初始值,对于所有 1≤i<n,数组 Ai 为数组 Ai−1 的前缀和数组。
现在小 D 有 p 个修改操作和 q 个查询操作:
- 对于修改操作,给出 x,l,r,k。将数组 Ax 的第 l∼r 项均增加 k。增加后,重新计算除了数组 Ax 外的所有数组,使得对所有 1≤i<n,满足数组 Ai 为数组 Ai−1 的前缀和数组。
- 对于查询操作,给出 x,l,r。请求出数组 Ax 中第 l∼r 项之和。结果对 109+7 取模。
请你执行这些操作,并输出所有查询操作的结果。
输入格式
输入文件名为 array.in。
输入的第一行包含三个整数 n,p,q,分别表示数组数量,修改操作数量和询问操作数量。
输入的第二行包含 n 个整数 A0,1,A0,2,…,A0,n,表示初始的数列 A0。
接下来 p+q 行,每行输入第一个数字 o 表示操作种类:
- 若 o=1,则为修改操作。接下来输入四个数字 x,l,r,k,表示将数组 Ax 的第 l∼r 项增加 k。
- 若 o=2,则为查询操作。接下来输入三个数字 x,l,r,表示查询数组 Ax 中第 l∼r 项之和。
输出格式
输出文件名为 array.out。
输出 q 行,一行一个非负整数,表示查询操作的结果。结果对 109+7 取模。
样例 #1
样例输入 #1
10 2 3
1 2 3 4 5 6 7 8 9 10
1 0 2 4 1
2 0 2 4
2 1 2 4
1 1 3 5 -1
2 2 2 8
样例输出 #1
12
25
378
提示
【样例 1 解释】
第一次修改后:
- 原数组 A0 为 [1,3,4,5,5,6,7,8,9,10];
- A1 为 [1,4,8,13,18,24,31,39,48,58];
- 查询的答案分别为 3+4+5=12 和 4+8+13=25。
第二次修改后:
- A1 为 [1,4,7,12,17,24,31,39,48,58];
- A2 为 [1,5,12,24,41,65,96,135,183,241];
- 第 2 项到第 8 项的和为 5+12+24+41+65+96+135=378。
【样例 2】
见附件 array.zip 中的 array2.in 与 array2.ans。
该样例满足测试点 4∼7 的限制。
【样例 3】
见附件 array.zip 中的 array3.in 与 array3.ans。
该样例满足测试点 8∼10 的限制。
【样例 4】
见附件 array.zip 中的 array4.in 与 array4.ans。
该样例满足测试点 22∼25 的限制。
【数据范围】
对于所有测试点,保证:
- 1≤n≤300
- 0≤p,q≤105
- 对于所有 1≤i≤n,均有 ∣A0,i∣≤109
- o∈{1,2}
- 对于所有操作,均有 0≤x<n,1≤l≤r≤n
- 对于所有操作 1,均有 ∣k∣≤109
| 测试点编号 |
n≤ |
特殊性质 |
| 1∼3 |
10 |
p,q≤10 |
| 4∼7 |
50 |
无 |
| 8∼10 |
300 |
x=0 |
| 11,12 |
p=0 |
| 13,14 |
q=1 |
| 15,16 |
询问中的 x=0 |
| 17,18 |
修改中的 x=0 |
| 19∼21 |
p,q≤3000 |
| 22∼25 |
无 |
附件