#71. 位运算的操作

位运算的操作

问题描述

对于一个整数,在计算机中是由二进制表示成的,从右往左依次从低位到高位,最右边是第 00 位。

例如 1313,其在计算机中的二进制为 11011101,原理为 1×20+0×21+1×22+1×23=131\times 2^0+0\times 2^1+1\times 2^2+1\times 2^3=13

现在给定 11 个整数 nnmm 次操作,操作具体为:

1 x:输出 nnxx 位的值是 00 还是 11,例如 1313 的第 22 位值是 11

2 l r:将 nnll 位到第 rr 位的值按位取反,然后输出 nn 的值。

3 l r:将 nnll 位到第 rr 位设置为 11,然后输出 nn 的值。

4 l r:将 nnll 位到第 rr 位设置为 00,然后输出 nn 的值。

5:输出该整数二进制中最后一个 11 所代表的值,例如 1101011010 你需要输出 221100011000 你需要输出 88,如果不存在 11 输出 00

输入格式

第一行输入两个正整数 n,mn,m。 (1n<230,1m2×1051\le n< 2^{30},1\le m\le 2\times 10^5

接下来 mm 行,输入为其中 11 种:

1 x:输出 nnxx 位的值,例如 1313 的第 22 位值是 11(0x<30)(0\le x< 30)

2 l r:将 nnll 位到第 rr 位的值按位取反,然后输出 nn 的值。(0lr30)(0\le l\le r\le 30)

3 l r:将 nnll 位到第 rr 位设置为 11,然后输出 nn 的值。(0lr30)(0\le l\le r\le 30)

4 l r:将 nnll 位到第 rr 位设置为 00,然后输出 nn 的值。(0lr30)(0\le l\le r\le 30)

5:输出该整数二进制中最后一个 11 所代表的值,例如 1101011010 你需要输出 221100011000 你需要输出 88,如果不存在 11 输出 00

输出格式

对于每次操作,按照题目要求输出。

样例输入

13 6
1 3
2 1 3
3 1 3
4 1 2
5
2 1 1

样例输出

1
3
15
9
1
11

说明

样例解释

1313 的二进制为 11011101

第一次操作输出 11

第二次操作后二进制变成 00110011,输出 33

第三次操作后二进制变成 11111111,输出 1515

第四次操作后二进制操作变成 10011001,输出 99

第五次操作输出 11

第六次操作后二进制变成 10111011,输出 1111