#P4991. 愤怒的XiaoX

愤怒的XiaoX

背景

答疑请到 https://www.luogu.org/discuss/show?postid=79498

在几天前的模拟赛上,XiaoX 又双叒叕 AK 了

他想卡一卡大家,于是他出了下面的一道题:

题目描述

给定一个序列,你要维护下列操作:

  1. 1 l r k,表示从 ll 到 rr 的数字最后 kk 位按位取反

  2. 2 l r k,表示从 ll 到 rr 的数字最后 kk 位进行翻转

  3. 3 w 表示查询 ww 这个位置的值

为了降低这道题的难度,我们做出以下规定:

对于序列的操作,我们的 kk 在一定范围内是一定的

我们一共会有 tt 个 kk

每个 kk 后面跟着一些操作

这些操作的 kk(修改的位数)都是相同的

按位取反定义:

比如说,一个数的二进制表示是:

10100111

对后 55 位取反后变成:

10111000

翻转定义:

比如说,一个数的二进制表示是:

10100111

对后 55 位翻转后变成:

10111100

输入格式

第一行,两个整数 nn,tt,表示序列长度和 kk 的数量

第二行,nn 个数,表示原始序列

下面 tt 组操作,对于每组操作第一行两个数 qiq_i,kik_i,表示操作数量和在这些操作中 kk 的值

下面 qiq_i 行,表示该组操作

输出格式

对于每个 33 操作,输出一行一个整数,表示答案的大小

5 2
665667089 948925818 1118302620 288255565 1682529647 
5 2
1 3 4
3 1
2 3 5
2 2 4
3 4
5 25
1 3 3
1 3 4
3 1
2 1 5
2 1 3
665667089
288255566
665667089

提示

对于 10%10\% 的数据,没有 1,21,2 操作

对于另 10%10\% 的数据,没有 11 操作

对于另 10%10\% 的数据,没有 22 操作

对于 50%50\% 的数据,t≤1t\le1

对于 70%70\% 的数据,t≤2t\le2

对于 100%100\% 的数据,t≤5t\le5,1≤n≤50000,1≤qi≤20000,k≤251\le n\le50000,1\le q_i\le20000,k\le25,初始序列制造方式为 rand()*rand()(windows下)

感谢 @swhsz 验题