#P4991. 愤怒的XiaoX

愤怒的XiaoX

题目背景

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

在几天前的模拟赛上,XiaoXXiaoX又双叒叕AKAK

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

题目描述

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

11 ll rr kk,表示从llrr的数字最后kk位按位取反

22 ll rr kk,表示从llrr的数字最后kk位进行翻转

33 ww 表示查询ww这个位置的值

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

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

我们一共会有ttkk

每个kk后面跟着一些操作

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

按位取反定义:

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

10100111

对后5位取反后变成:

10111000

翻转定义:

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

10100111

对后5位翻转后变成:

10111100

输入格式

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

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

下面tt组操作,对于每组操作第一行两个数qiq_ikik_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

提示

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

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

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

对于5050%的数据,t<=1t<=1

对于7070%的数据,t<=2t<=2

对于100100%的数据,t<=5t<=5,1<=n<=50000,1<=qi<=20000,k<=251<=n<=50000,1<=q_i<=20000,k<=25,初始序列制造方式为rand()rand()rand()*rand()(windows下)

感谢@swhsz验题