编程题
### 问题描述 有一个长度为 $n$ 的数组 $a$ ,第 $i$ 个元素是 $ai$ 。 现在我们要对数组进行 $m$ 次操作,操作分两种: 1. 每次操作给出 $l,r,x,y$,我们需要把数组中第 $l$ 个数到第 $r$ 个数的二进制位下的第 $l$ 到第 $r$ 位翻转(从 $0$ 开始,最右边是第 $0$ 位)。比如把 $4(0100)$ 的第 $1$ 位到第 $3$ 位翻转,就是 $10(1010)$ 。 2. 每次操作给出 $x$,我们需要输出数组中第 $x$ 个数的值。 ### 输入格式 第一行包含 $2$ 个正整数 $n$ 和 $m$ ($1\leq n \leq 10^5$,$1\leq k \leq 10^{5}$)。 第二行包含 $n$ 个正整数 $a_i$($0\leq a_i \leq 10^6$)。 接下来 $m$ 行,每行开头为操作类型 $op$ ($1\leq op \leq 2$)。 如果 $op=1$ ,将会给出 $l,r,x,y$($1\leq l \leq r \leq 10^5$,$0\leq l \leq r \leq 21$)。 如果 $op=2$ ,将会给出 $x$($1\leq x \leq 10^5$)。 ### 输出格式 对于每个操作 $2$ ,输出 $1$ 个整数,这个整数是数组中第 $x$ 个数的值。 ### 样例输入 ```text 5 3 1 2 3 4 5 1 1 3 2 4 2 1 2 2 ``` ### 样例输出 ```text 29 30 ``` ### 说明 **样例说明** 原数组为:$1(00001),2(00010),3(00011),4(00100),5(00101)$ 。 翻转第 $1$ 个数到第 $3$ 个数的二进制位下的第 $2$ 到第 $4$ 位。 此时数组为:$29(11101),30(11110),31(11111),4(00100),5(00101)$ 。
查看答案
赣ICP备20007335号-2