P4991 愤怒的XiaoX

题目背景

### 答疑请到 https://www.luogu.org/discuss/show?postid=79498 在几天前的模拟赛上,XiaoX 又双叒叕 AK 了 他想卡一卡大家,于是他出了下面的一道题:

题目描述

给定一个序列,你要维护下列操作: 1. `1 l r k`,表示从 $l$ 到 $r$ 的数字最后 $k$ 位按位取反 2. `2 l r k`,表示从 $l$ 到 $r$ 的数字最后 $k$ 位进行翻转 3. `3 w` 表示查询 $w$ 这个位置的值 为了降低这道题的难度,我们做出以下规定: 对于序列的操作,我们的 $k$ 在一定范围内是一定的 我们一共会有 $t$ 个 $k$ 每个 $k$ 后面跟着一些操作 这些操作的 $k$(修改的位数)都是相同的 ### 按位取反定义: 比如说,一个数的二进制表示是: ``` 10100111 ``` 对后 $5$ 位取反后变成: ``` 10111000 ``` ### 翻转定义: 比如说,一个数的二进制表示是: ``` 10100111 ``` 对后 $5$ 位翻转后变成: ``` 10111100 ```

输入格式

第一行,两个整数 $n$,$t$,表示序列长度和 $k$ 的数量 第二行,$n$ 个数,表示原始序列 下面 $t$ 组操作,对于每组操作第一行两个数 $q_i$,$k_i$,表示操作数量和在这些操作中 $k$ 的值 下面 $q_i$ 行,表示该组操作

输出格式

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

说明/提示

对于 $10\%$ 的数据,没有 $1,2$ 操作 对于另 $10\%$ 的数据,没有 $1$ 操作 对于另 $10\%$ 的数据,没有 $2$ 操作 对于 $50\%$ 的数据,$t\le1$ 对于 $70\%$ 的数据,$t\le2$ 对于 $100\%$ 的数据,$t\le5$,$1\le n\le50000,1\le q_i\le20000,k\le25$,初始序列制造方式为 `rand()*rand()`(windows下) 感谢 @swhsz 验题