#P11071. 「QMSOI R1」 Distorted Fate

「QMSOI R1」 Distorted Fate

题目背景

O Fortuna velut luna statu variabilis……

(图片来自 Phigros 曲绘,侵删。)

加强版 T512613

题目描述

Geopelia 需要捕捉到一种特殊的,不同于黑洞的引力波。

ii 个引力波有着一个频率 AiA_i,而多个引力波会互相影响,叠加,形成一个频率更快的引力波。

具体的,对于一个长度为 nn 的序列 AAAA 中所有引力波叠加起来的频率 f(A)f(A) 为:i=1nAi\bigcup\limits_{i=1}^n A_i。其中 \bigcup 表示按位或。

现在,Geopelia 需要知道几段以同一引力波开始的区间的频率之和。

也就是说,Geopelia 要向你询问:

i=lrf(A[l,i])\sum_{i=l}^rf(A[l,i])

的值,其中 A[l,r]A[l,r]Al,Al+1,,Ar1,ArA_l,A_{l+1},\cdots,A_{r-1},A_r 组成的序列。

但不幸的是,由于幽蓝边界的引力影响,某一个区间 [l,r][l,r] 中所有引力波的频率可能会异或上一个值 xx

Geopelia 想实时更新她的数据,你可以帮帮她吗?

她知道引力波的频率可能很高,所以你只需要告诉她答案 mod 230\bmod \ 2^{30} 的值就可以了。

形式化题意

给定一个长度为 nn 的数组 AA,你需要完成以下 qq 次操作。

  1. 1 l r xAi(lir)A_i(l\le i\le r) 异或上 xx

  2. 2 l r 求:

(i=lrj=liAj)mod230(\sum_{i=l}^r\bigcup_{j=l}^i A_j) \bmod 2^{30}

其中 \bigcup 表示按位或。

输入格式

第一行输入两个数 nnqq,代表引力波的数量和操作的次数。

第二行输入 nn 个整数,第 ii 个数代表引力波 ii 初始的频率 AiA_i

接下来 qq 行,每行输入三个整数 opt,l,ropt,l,r

opt=1opt=1,则再输入一个整数 xx 表示将区间 [l,r][l,r] 中引力波的频率异或上 xx

opt=2opt=2,则代表这是一次查询。

输出格式

对于每个查询,输出一行一个整数代表所求式子的值 mod 230\bmod \ 2^{30} 的结果。

3 3
1 2 3
2 1 3
1 1 2 2
2 1 3
7
9

提示

样例解释

对于第一组询问:此时 A={1,2,3}A=\{1,2,3\},所以答案为 1+12+123=1+3+3=71+1\cup 2+1\cup 2\cup 3=1+3+3=7

对于第二组询问:此时 A={3,0,3}A=\{3,0,3\},所以答案为 3+30+303=3+3+3=93+3\cup 0+3\cup 0\cup 3=3+3+3=9

数据范围

本题使用 subtask 进行捆绑测试,每个 subtask 的具体分值如下:

子任务 nn qq 时间 空间 分值
00 100\le 100 1s1s 512MB512MB 2020
11 2×104\le 2\times 10^4
22 2×105\le 2\times 10^5 3s3s
33 100MB\color{red}100MB 4040

对于所有数据,满足 0ai,x<2300\le a_i,x< 2^{30}1lrn1\le l\le r\le n

INITALIZING……
SCANING……
CONNECTING……__PhigrOS Client Login
TIME_OUT!
CONNECTING……__Unknown
SUCCESS!
————————
……九……鸟……
……鸠……!
……喂?
…听得到吗?
鸠?![SIGNAL LOST]