Description
有 n 个格子排成一行,第 i 个格子的颜色为 ci,上面放置着一个权值为 vi 的球。
您将要在格子中进行若干次旅行。每次旅行时,您会得到旅行的起点 x 与一个颜色集合 A={a1,a2,⋯,ak},且保证 cx∈A。旅行将从第 x 个格子上开始。在旅行期间,如果您在格子 i 处,那么您可以向格子 (i−1) 或 (i+1) 处移动,但不能移动到这 n 个格子之外。且在任意时刻,您所处的格子的颜色必须在集合 A 中。
当您位于格子 i 时,您可以选择将格子上的球取走,并获得 vi 的权值。由于每个格子上只有一个球,因此一个格子上的球只能被取走一次。
您的任务是依次处理 q 次操作,每次操作形如以下三种操作之一:
- 1px:将 cp 修改为 x。
- 2px:将 vp 修改为 x。
- 3xka1a2…ak:给定旅行的起点 x 与一个颜色集合 A={a1,a2,⋯,ak}。假设如果进行这样的一次旅行,求出取走的球的权值之和最大是多少。注意,由于我们仅仅假设进行一次旅行,因此并不会真的取走任何球。即,所有询问之间是独立的。
有多组测试数据。第一行输入一个整数 T 表示测试数据组数。对于每组测试数据:
第一行输入两个整数 n 和 q(1≤n≤105,1≤q≤105)表示格子的数量和操作的数量。
第二行输入 n 个整数 c1,c2,…,cn(1≤ci≤n),其中 ci 表示第 i 个格子的初始颜色。
第三行输入 n 个整数 v1,v2,…,vn(1≤vi≤109),其中 vi 表示第 i 个格子里的球的初始权值。
对于接下来 q 行,第 i 行描述第 i 次操作,格式如下:
- 1px:保证 1≤p≤n 且 1≤x≤n。
- 2px:保证 1≤p≤n 且 1≤x≤109。
- 3xka1a2…ak:保证 1≤x≤n 且 1≤a1<a2<…<ak≤n 且 cx∈{a1,a2,⋯,ak}。
保证所有数据 n 之和与 q 之和均不超过 3×105,且所有数据 k 之和不超过 106。
对于每次操作 3 输出一行一个整数,表示取走的球的权值之和的最大值。
2
5 10
1 2 3 1 2
1 10 100 1000 10000
3 3 1 3
3 3 2 2 3
2 5 20000
2 3 200
3 3 2 1 3
3 3 3 1 2 3
1 3 4
2 1 100000
1 2 2
3 1 2 1 2
4 1
1 2 3 4
1000000 1000000 1000000 1000000
3 4 4 1 2 3 4
100
110
1200
21211
100010
4000000