小苯的神奇背包
题号:NC285726
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小苯有一个神奇的背包,只需要满足一些物品体积的异或和 (\oplus) 值不为 0,神奇的背包即可装下这些所有物品,背包此时所装物品的总价值为所有物品的价值之和(加法和)。

现在小苯面前有 n 个物品,第 i 个物品的体积为 v_i,价值为 w_i。小苯会进行 q 次修改、查询,每次操作都是以下三种之一:

修改:
    \bullet \ k, v 将第 k 个物品的体积修改为 v
    \bullet \ k, w 将第 k 个物品的价值修改为 w
(注意:修改操作是持久生效的,即修改后物品的属性会永久改变。)
查询:
    \bullet \ l, r 表示查询:从子数组 a_l, a_{l+1},\cdots, a_r 中任选物品装入“神奇背包”时,所装物品的的最大总价值。
(特别的,神奇背包没有装入任何物品时,其价值视为 0。)

小苯希望你帮他回答每一次查询,请你帮帮他吧。

输入描述:

本题含有多组测试数据。
第一行一个正整数 T\ (1 \leq T \leq 100),表示测试数据的组数。
接下来对于每组测试数据,输入包含 n+q+1 行:
第一行两个正整数 n, q\ (1 \leq n, q \leq 3 \times 10^5),表示小苯面前的物品个数,以及小苯的操作次数。
接下来 n 行,每行两个正整数 v_i, w_i\ (0 \leq v_i \leq 10^9, 0 \leq w_i \leq 10^9),分别表示每个物品的体积、价值。
接下来 q 行,每行三个正整数,其中第一个是 op
\bullet 如果 op=1,则接下来输入两个正整数是 k, v\ (1 \leq k \leq n, 0 \leq v \leq 10^9),表示将第 k 个物品的体积修改为 v
\bullet 如果 op=2,则接下来输入两个正整数是 k, w\ (1 \leq k \leq n, 0 \leq w \leq 10^9),表示将第 k 个物品的价值修改为 w
\bullet 如果 op=3,则接下来输入两个正整数是 l, r \ (1 \leq l \leq r \leq n),表示询问从子数组 a_l, a_{l+1}, \cdots, a_r 中选择一些物品装入神奇背包的最大价值。
(数据保证对于每组测试数据,至少存在一次查询操作。)
(保证所有测试数据中,n,q 的总和都分别不超过 3 \times 10^5。)

输出描述:

对于每组测试数据,输出若干行,每行一个整数,表示对于每次查询操作的回答。
示例1

输入

复制
1
4 3
1 3
2 4
3 1
4 2
3 1 3
1 3 4
3 3 4

输出

复制
7
2

说明

样例中,共有四个物品,体积分别为:\{1,2,3,4\},价值分别为:\{3, 4, 1, 2\}
三次操作:
1. 首先询问区间 [1, 3] 任选物品装入“神奇背包”的最大价值,最优的方案是装入编号 \{1,2\} 的物品,此时物品体积的异或和 \oplus1 \oplus 2=3 \ne 0,物品的价值和为 3+4=7,最大。
2. 再将 3 号物品的体积修改为 4
3. 此时询问区间 [3, 4] 任选物品装入“神奇背包”的最大价值,最优的方案是装入编号 \{4\} 的物品,此时物品体积的异或和 \oplus4 \ne 0,物品的价值和为 2,最大。