题目背景
本题时限较小,请采用较快的读入方式,以下是出题人提供的快读模板:
当然你也可以采用自己的读入方法。
题目描述
在一次聚会上,一共有 n 名学生,他们的编号分别为 1,2,3,⋯,n,他们被分成 k 组,组的编号分别为 1,2,3,…,k。
小 V 老师负责组织这场聚会,在聚会的开始,第 i 名学生被分到了第 ai 组,并拿到了 bi 颗糖果。(小 V 既不属于任何组别,也没有任何糖果。在接下来的活动中,小 V 作为组织者的身份。)
这一次聚会一共有 m 轮活动,对于每一轮活动,可能发生以下两种情况之一:
Change X Y
,表示把所有组别为 X 的学生的组别改为 Y(修改后 X 即为空组),并把组 X 删除。
Query
,表示小 V 想要知道,如果把剩下的组合并(定义见下) 成一大组,那么这一大组内拥有最多糖果的学生的糖果数最少可能是多少。
定义一个组 Gi 的大小就是这个组内含有学生的个数,记为 Si。
合并:将大小为 S1(S1>0) 的组 G1 合并到大小为 S2(S2>0) 的组 G2,其中 G1 组内所有学生拥有糖果数之和为 f,则:
- 第一步,将原先 G1 中所有学生的糖果数都变为 0,并将他们的组别改为 G2。
- 第二步,将目前 G2 中每位学生(包括原先 G1 中的学生)的糖果数加上 S1+S2f(糖果数不一定为整数块)。
注意:
- G1 合并到 G2 的最后结果可能会与 G2 合并到 G1 的最后结果不同。
Query
中的合并不会真实发生。即在这一次情况过后,所有学生的糖果数与所在组与此次操作未发生前一致。
请将每次 Query
中的答案对 109+7 取模。(可能是分数取模,如果不知道如何取模请见提示说明)
输入格式
第一行三个整数 n,m,k。
第二行 n 个整数 a1…n。
第三行 n 个整数 b1…n。
接下来 m 行,每行对应一种情况。具体格式参见题目描述或输入输出样例。
输出格式
输出若干行整数表示答案。
提示
【样例解释】
第一次 Query
时,将第二组合并到第一组,此时三名学生的糖果数分别为 314,317,35,糖果数最多的同学有 317 块糖果,取到了最小值,对 109+7 取模后为 666666677。
第二次 Query
时,所有学生都在同一组,而糖果数最多的同学有 5 块糖果。
【数据范围】
数据点 |
n |
m |
k |
ai |
bi |
1 |
≤10 |
无特殊限制 |
≤10 |
≤100 |
2 |
≤100 |
≤10 |
≤100 |
3 |
≤105 |
=1 |
≤105 |
4 |
无特殊限制 |
=1 |
≤105 |
5 |
≤103 |
≤5 |
≤100 |
6 |
≤104 |
≤103 |
≤104 |
≤105 |
7 |
≤5×103 |
8 |
≤105 |
无特殊限制 |
≤105 |
9 |
≤5×105 |
5×105 |
10 |
≤106 |
≤106 |
对于 100% 的数据,满足 1≤n≤106, 1≤m≤2×k−1, 1≤ai≤k≤n, 1≤bi≤105。数据保证合法,初始时每组是非空的。
不熟悉有理数取模的请看此处。