#P12781. 10010
10010
10010
Problem Description
对于一个二进制数 ,设 ,设 。 定义 函数:,当 时
$$f(x) = \begin{cases} y & z = 0\\ f(z) + 2 & z \neq 0 \land \mathrm{lowbit}(z) = \mathrm{lowbit}(x) \times 2 \\ y & z \neq 0 \land \mathrm{lowbit}(z) \neq \mathrm{lowbit}(x) \times 2 \end{cases} $$给出一个长度为 的 序列 。有 次操作,每次操作都形如以下的两种:
1 l r
:查询序列 的区间 组成的二进制数 的 值。2 x
:令 反转( 变成 , 变成 )。 表示 在二进制表示下最低位的 及其后面所有的 构成的数值。 表示逻辑且。
Input
每个测试点中包含多组测试数据。输入的第一行包含一个正整数 ,表示数据组数。对于每组测试数据: 第一行两个正整数 $n, m(1 \leq n \leq 5.1 \times 10^5, 1 \leq m \leq 5 \times 10^5)$,分别表示字符串长度和操作次数。 第二行一个长度为 的字符串,表示初始的 序列 。 接下来 行,每行若干个整数,第一个数 表示操作类型:
- 若 ,则后面两个数 ,表示查询的区间。
- 若 ,则后面一个数 ,表示修改的位置。 保证所有测试数据中 之和不超过 , 之和不超过 。
Output
对于每组测试数据:对于每一个 的操作,输出一行一个数表示答案。
Sample Input
1
11 3
10001001000
1 2 9
2 10
1 6 10
Sample Output
4
3
Source
2025“钉耙编程”中国大学生算法设计暑期联赛(2)