Happybob's Magic (UBC001F)
题目描述
Happybob 正在游戏里研究一排灯,总共 $2^n$ 个,编号为 $0\sim 2^n-1$。Happybob 有两个技能。
一技能(按下 `B` 释放)释放一次,所有的灯亮变成灭,灭变成亮。
二技能(按下 `D` 释放)就厉害了,每释放一次,假设释放前的所有亮着的灯的编号组成的集合是 $X$,那么对于 $X$ 的**所有 $2^{|X|}$ 个子集(包含空集)** $Y$,Happybob 会把第 $\bigoplus(Y)$ 盏灯点亮。这里的 $|X|$ 表示 $X$ 集合的大小,$\bigoplus(Y)$ 表示将集合 $Y$ 的所有元素进行二进制按位异或得到的结果。特别地,$\bigoplus(\varnothing) = 0$。
现在有一个 `B`,`D` 构成的施法序列 $S(|S|=m)$(意义如上),一个灯的初始状态序列(第 $0$ 个版本)$a_0,a_1,\cdots,a_{2^n-1}$,以及一个变量 $vid=0$。Happybob 有 $q$ 次询问,每次询问可能是:
1. `1 v l r`:将 $vid$ 加 $1$,对第 $v$ 个版本依次执行 $S_l$ 到 $S_r$ 的施法操作,将结果存入第 $vid$ 个版本中,并问第 $vid$ 个版本中有多少盏灯是亮的。
2. `2 v k`:问第 $v$ 个版本的第 $k$ 盏灯是不是亮的。是输出 $1$,否则输出 $0$。
3. `3 v k`:设第 $v$ 个版本是从第 $v'$ 个版本执行了 $t$ 次施法操作变过来的,问有多少次施法操作之后,第 $k$ 盏灯是亮的(原来是亮的不算)。
对于第三种询问,这里的 $v'$ 和 $t$ 具体定义如下:假设进行某一次第一种询问后 $vid = v$,则 $v'$ 等于那一次询问给定的 $v$,$t$ 即那一次询问给定的操作序列 $S_{l\cdots r}$ 的长度。
保证 $0\le v\le vid$(如果是第一个操作,则是加 $1$ 前的 $vid$;如果是第三个操作,还保证 $v>0$)。
输入输出格式
输入格式
第 $1$ 行,$3$ 个整数 $n,m,q$;
第 $2$ 行,$2^n$ 个整数 $a_0,a_1,\cdots,a_{2^n-1}$;
第 $3$ 行,$1$ 个字符串 $S$(下标从 $1$ 开始),对于每个满足 $1\le i\le m$ 的整数 $i$,如果 $S_i$ 是 `B`,那么表示 Happybob 释放了一次一技能,否则他释放了一次二技能;
接下来 $q$ 行,每行 $3$ 个或 $4$ 个非负整数,表示一个询问。
输出格式
$q$ 行,第 $i$ 行一个整数,表示第 $i$ 个询问的结果。
输入输出样例
输入样例 #1
3 10 6
0 1 0 1 0 1 0 0
BDBDBDDBBD
1 0 1 5
1 0 8 10
1 0 6 8
2 2 4
2 3 4
3 1 3
输出样例 #1
7
8
0
1
0
2
说明
### 样例说明
| 版本编号 | 灯的状态 |
| --- | --- |
| $0$ | $01010100$ |
| $1$ | $01111111$ |
| $2$ | $11111111$ |
| $3$ | $00000000$ |
对于最后一次询问,每次施法操作后的状态如下:
| 操作 | 灯的状态 |
| --- | --- |
| 初始值 | $01010100$ |
| `B` | $10101011$ |
| `BD` | $111\red11111$ |
| `BDB` | $00000000$ |
| `BDBD` | $10000000$ |
| `BDBDB` | $011\red11111$ |
第 $3$ 盏灯亮了 $2$ 次。
### 数据范围
对于 $100\%$ 的数据, $1\le n\le 18$,$1\le q\le 2\times 10^5$,$a_i\in\{0, 1\}$,$1\le l\le r\le m\le 2\times 10^5$,$0\le k<2^n$。保证 $S$ 中只含字符 `B` 与 `D`(可能不含 `B` 或不含 `D`),且 $S$ 的长度为 $m$。