#P6781. [Ynoi2008] rupq

[Ynoi2008] rupq

题目描述

给定一个长为 nn 的括号序列,每个位置有一个括号 aia_i,其中 ai=1a_i=1 代表是左括号 ′(′'(',ai=0a_i=0 代表是右括号 ′)′')'。 aia_i 位置的括号有一个权值 bib_i。

对任意括号序列,通过不断删除形如 ′()′'()' 的子段直到无法操作,最终可以得到一个唯一的序列,这个序列称为不匹配括号,如 a1=′)′,a2=′(′,a3=′(′,a4=′)′,a5=′(′a_1=')',a_2='(',a_3='(',a_4=')',a_5='(',这个括号序列的不匹配括号序列为 ′)((′')((',其不匹配括号对应位置为 1,2,51,2,5,其不匹配括号对应位置的 bb 为 b1,b2,b5b_1,b_2,b_5。

有 mm 次操作,操作有以下三类:

1 x y:进行单点修改,即 ax:=1−ax;bx:=ya_x:=1-a_x; b_x:=y。

2 l r:求 a[l..r]a[l..r] 中不匹配括号对应位置的 bb 从左到右的 NAND\texttt {NAND} (3232 位的按位与非,可以见 https://en.wikipedia.org/wiki/NAND_logic ), max\texttt {max}(最大值) ,将二者 xor\texttt {xor} 后输出。如果不匹配括号为空序列,则 NAND\texttt {NAND} 的答案为 232−12^{32}-1, max\texttt {max} 的答案为 00。

NAND\texttt {NAND} 即以 c0=232−1c_0=2^{32}-1 为初值,然后依次 ci=NAND(ci−1,bi)c_i=\texttt {NAND}(c_{i-1},b_i),对于一个 nn 个值的序列 bb,最后答案为 cnc_n。

3 l r:将 a[l..r]a[l..r] 和 a[r+1..n]a[r+1..n] 交换位置,bb 也做同样的操作。

输入格式

第一行用空格隔开的两个数 n,mn,m。

之后 nn 行每行用空格隔开的两个数,第 ii 行为 ai,bia_i,b_i。

之后 mm 行,每行表示一个操作。

输出格式

对每个操作 22 输出一行表示答案。

10 10
0 1
1 9
1 2
0 5
1 1
0 6
1 1
0 4
0 8
1 7
2 5 7
3 1 10
1 1 3
2 1 3
3 2 9
3 4 10
3 7 8
1 10 2
3 3 4
2 5 7
4294967295
4294967284
4294967281

提示

Idea:ccz181078,Solution:ccz181078,Code:ccz181078,Data:nzhtl1477

对于 100%100\% 的数据,

0≤a[i]≤10 \le a[i] \le 1。

0≤b[i]≤1090 \le b[i] \le 10^9。

1≤n≤2×106,1≤m≤2×1051 \le n \le 2\times10^6,1 \le m \le 2\times10^5。