题目描述
R 国的历史非常悠久。
R 国有 n 个城市,国内有 C 个党派,分别记为 1,2,…,C。由于 R 国的版图非常长,这 n 个城市的位置可以近似为坐标轴上的 n 个点。在历史的最初,记载了第 i 个城市归属党派 ci,城中有数量为 ai 的军队。
R 国的历史上,经常发生以下三种事件:
-
党派 y 进行了一次游说,使城市 l 到城市 r 的所有归属党派 x 的城市全部归属了 y。
-
党派 x 进行了一次征兵,使城市 l 到城市 r 的所有归属党派 x 的城市中的军队数量增加了 v。
-
城市 l 到城市 r 之间的所有城市爆发了战争。这场战争的规模可以描述为两地之间的所有城市中的军队数量之和。注意战争不一定发生在不同党派之间,归属同一个党派的一些城市内部也可能发生内战。由于 R 国的医护系统足够先进,战争不会造成军队数量的减少。
小 N 是一个喜欢历史的女孩子,最近她想整理一下 R 国的战争史,特别是每场战争的规模。但是由于 R 国的历史实在太长了,她用纸和笔进行运算实在力不从心。于是她找到了你,希望你写一个程序,统计出 R 国历史上所有战争的规模。
输入格式
输入的第一行是三个正整数 n,q,C,分别表示城市的个数,事件的个数,和 R 国国内党派的个数。
接下来一行有 n 个正整数 a1,a2,…,an,表示每个城市内初始的军队数。
接下来一行有 n 个正整数 c1,c2,…,cn,表示每个城市初始归属的党派。
接下来 q 行,每行 3 到 5 个正整数,表示一次事件:
第一个正整数 op 表示事件的类型。op=1,2,3 分别表示【题目描述】中所述的游说,征兵和战争事件。
对于每个游说事件,接下来有 4 个正整数 l,r,x,y,意义见【题目描述】。
对于每个征兵事件,接下来有 4 个正整数 l,r,x,v,意义见【题目描述】。
对于每个战争事件,接下来有 2 个正整数 l,r,意义见【题目描述】。
输出格式
对于每个战争事件,输出一行一个整数,表示此次战争的规模。
提示
【样例 1 解释】
最初,五个城市的军队数量分别为 1,2,4,8,16,归属的党派分别为 1,2,3,2,3。
发生的事件依次为:
- 党派 2 尝试在城市 2,3,4 征兵,归属党派 2 的城市 2,4 各增加了 32 军队。
- 城市 1 和 4 之间的所有城市爆发了战争,规模为 1+34+4+40=79。
- 党派 1 在城市 1,2,3,4,5 进行了一次游说,使得原本归属党派 3 的城市 3,5 归属了党派 1。
- 党派 1 尝试在城市 2,3,4,5 征兵,归属党派 1 的城市 3,5 各增加了 64 军队。
- 城市 2 和 4 之间的所有城市爆发了战争,规模为 34+68+40=142。
- 党派 3 尝试在城市 1,2,3 征兵,但是党派 3 现在不拥有任何城市,因此并没有成功征兵。
- 城市 3 和 5 之间的所有城市爆发了战争,规模为 68+40+80=188。
因此你的程序应该依次输出 79,142,188。
【数据规模与约定】
对于全部数据,1≤n,q≤2.5×105,1≤ai,v≤108,1≤ci,x,y≤C。
具体的数据规模与约定见下表。
测试点编号 |
n,q≤ |
C≤ |
特殊约定 |
1 |
20 |
|
2 |
50 |
3 |
300 |
4 |
5000 |
5 |
105 |
10 |
6 |
1.5×105 |
7 |
2×105 |
8 |
2.5×105 |
9 |
1.5×105 |
对于所有操作,保证 l=1,r=n。 |
10 |
2.5×105 |
11 |
1.5×105 |
对于所有操作 1,2,保证 l=1,r=n。 |
12 |
2×105 |
13 |
2.5×105 |
14 |
1.5×105 |
保证不存在操作 1。 |
15 |
2.5×105 |
16 |
105 |
|
17 |
1.5×105 |
18 |
2×105 |
2×105 |
19 |
2.5×105 |
20 |