#HD202502K. 10010
10010
对于一个二进制数 ,设 ,设 。
定义 函数:,当 时
$$f(x) = \begin{cases} y & z=0 \\ f(z)+2 & z \ne 0 \land lowbit(z)=lowbit(x) \times 2 \\ y & z \ne 0 \land lowbit(z) \ne lowbit(x) \times 2 \end{cases} $$给出一个长度为 的 序列 。有 次操作,每次操作都形如以下的两种:
1 l r
:查询序列 的区间 组成的二进制数 的 值。2 x
:令 反转( 变成 , 变成 )。
† 表示 在二进制表示下最低位的 及其后面所有的 构成的数值。
† 表示逻辑且。
输入格式
每个测试点中包含多组测试数据。输入的第一行包含一个正整数 ,表示数据组数。
对于每组测试数据:
- 第一行两个正整数 $(1 \le n \le 5.1 \times 10^5, 1 \le m \le 5 \times 10^5)$,分别表示字符串长度和操作次数。
- 第二行一个长度为 的字符串,表示初始的 序列 。
- 接下来 行,每行若干个整数,第一个数 表示操作类型:
- 若 ,则后面两个数 ,表示查询的区间。
- 若 ,则后面一个数 ,表示修改的位置。
保证所有测试数据中 之和不超过 , 之和不超过 。
输出格式
对于每组测试数据:对于每一个 的操作,输出一行一个数表示答案。
样例
输入
1
11 3
10001001000
1 2 9
2 10
1 6 10
输出
4
3