#P6562. [SBCOI2020] 归家之路

    ID: 5104 远端评测题 1000ms 128MiB 尝试: 0 已通过: 0 难度: 8 上传者: 标签>O2优化状态压缩,状压前缀和块状链表,块状数组,分块

[SBCOI2020] 归家之路

Description

天空中一共有 2n2^n 颗星,依次编号为 0,1,...,2n10,1,...,2^n-1。每颗星都有一个亮度值。初始时第 ii 颗星的亮度值为 aia_i

对于两个正整数 a,ba,b 我们定义一种布尔类型运算 aba\otimes b 。如果在 aa二进制表示中,满足每一个 aa11 的位,bb 的对应位也是 11,那么 aba\otimes bTrue , 否则 aba\otimes bFalse
若两数在二进制表示下的位数不同,则将两数 右对齐 后在左侧补0。例如两个数是 111111 (二进制),11 会变成 0101

对于这些星的亮度值有两种操作:

第一种:11 aa bb kk。对于所有的满足 aca\otimes c 值为 True 以及 cbc\otimes b 值为 Truecc,将第 cc 颗星的亮度值加上 kk

第二种:22 aa bb。若第 cc 颗星的编号 cc 满足 aca\otimes c 值为 True 以及 cbc\otimes b 值为 True。求出所有第 cc 颗星的亮度总和,答案对 2322^{32} 取模。

Input Format

第一行两个整数 n,qn,q

第二行 2n2^n 个整数,用空格隔开,表示 a0,a1,,a2n1a_0,a_1,\cdots,a_{2^n-1}

接下来 qq 行,每行代表一个操作,格式见【题目描述】。

Output Format

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

3 3
1 2 3 4 5 6 7 8
2 0 7
1 1 5 1
2 1 7
36
22

Hint

【样例解释】

第一次是询问,00 的二进制表示为 00000077 的二进制表示为 111111 。此时,所有数都满足,即求的是所有数之和,为 3636

第二次是修改,11 的二进制表示为 00100155 的二进制表示为 101101,发现 c=1,5c=1,5 满足,二进制表示分别为 001001101101所以 a1,a5a_1,a_5 的值从 2,62,6 变为 3,73,7

第三次是询问,11 的二进制表示为 00100177 的二进制表示为 111111,发现 c=1,3,5,7c=1,3,5,7 满足,二进制表示分别为 001001011011101101111111。求的是 a1,a3,a5,a7a_1,a_3,a_5,a_7 的和 3+4+7+8=223+4+7+8=22

【数据范围】

本题捆绑测试,共有 44 个子任务

Subtask1(1%)Subtask 1(1\%):答案为样例。

Subtask2(9%)Subtask 2(9\%)n12,m2×103n \le 12,m \le 2\times 10^3

Subtask3(15%)Subtask 3(15\%):所有 22 操作都在 11 操作之后。

Subtask4(75%)Subtask 4(75\%):没有任何额外限制。

对于 100%100\% 的数据,$1 \le n \le 16,1 \le m \le 2\times 10^5, 0 \le a,b \le 2^n-1,0 \le a_i,k \le 2^{32}-1$。

【温馨提示】

2322^{32} 取模,可以直接用无符号 32 位整形的数据类型进行运算。在 c++ 中就是 unsigned int

也就是【直接自然溢出啥事没有】。