P7803 [JOI Open 2021] 杂交 / Crossing
题目背景
**警告:滥用本题评测将被封号。**
题目描述
你的资源库里有 $3$ 个长度为 $N$ 的只由 `J`,`O`,`I` 组成的序列 $S_A,S_B,S_C$,你可以进行 C 操作(全名为 Cross 操作,简写为 C 操作),每一次 C 操作你可以在资源库里选择两个字符串 $C_1,C_2$,C 操作后产生的字符串为 $C_3$,则对于任意 $i \in [1,N]$,设这三个字符串第 $i$ 个位置上的字符分别为 $c_1,c_2,c_3$,有:
|$c_1$|$c_2$|$c_3$|
|:-:|:-:|:-:|
|J|J|J|
|J|O|I|
|J|I|O|
|O|J|I|
|O|O|O|
|O|I|J|
|I|J|O|
|I|O|J|
|I|I|I|
上面这个表格的意思是 $c_1,c_2$ 为对应字符时,$c_3$ 也应该是对应的字符。
进行 C 操作后将会把产生的字符串放入资源库。
你被给定了一个长度为 $N$ 的只由 `J`,`O`,`I` 组成的字符串 $T_0$,和 $Q$ 个整数 $L_j,R_j$ 和 $Q$ 个字符 $C_j$,由这些形成 $Q$ 个长度为 $N$ 的字符串 $T_j$,规则为:
> $T_j$ 是由 $T_{j-1}$ 的第 $L_j$ 个字符到第 $R_j$ 个字符都替换成 $C_j$ 得到的。
求对于每一个字符串(包括 $T_0$),是否能由给定的资源库进行一次或多次 C 操作得来。如果该字符串与资源库的其中一个字符串一模一样,也可以称“进行 C 操作得来”,详细内容请看样例 1 的 $T_2$。
第 $j$ 个字符串进行 C 操作时放入资源库的字符串将会在对第 $j+1$ 个字符串判断时清空。
输入格式
第一行一个整数 $N$ 代表字符串的长度。
接下来 $3$ 行 $S_A,S_B,S_C$ 代表给定的资源库里的字符串。
第五行一个整数 $Q$ 代表给定的字符串个数。
第六行一个字符串 $T_0$,意义如题面所述。
接下来 $Q$ 行每行两个整数和一个字符 $L_j,R_j,C_j$,意义如题面所述。
输出格式
$Q+1$ 行每行一个字符串 `Yes` 或 `No`,第 $j$ 行代表第 $T_{j-1}$ 个字符串是否可以由初始资源库得来。
说明/提示
#### 样例 1 解释
- $T_0$ 可以由 `JJOI` 和 `OJOO` 经过 C 操作而来;
- $T_1$ 为 `OOOO`,无法从资源库经过 C 操作而来;
- $T_2$ 为 `OJOO`,资源库中有 `OJOO`,故可以;
- $T_3$ 为 `OIII`:
1. 由 `JJOI` 和 `OJOO` 经过 C 操作产生 `IJOJ`;
2. 由 `JOJO` 和 `IJOJ` 经过 C 操作产生 `OIII`。
#### 样例 2 解释
- $T_0$ 无法从资源库经过 C 操作而来;
- $T_1$ 为 `OOI`,无法从资源库经过 C 操作而来;
- $T_2$ 为 `JOI`,资源库中有 `JOI`,故可以。
#### 数据规模与约定
**本题采用捆绑测试。**
- Subtask 1(3 pts):$S_A=S_B=S_C$,$N \le 100$;
- Subtask 2(23 pts):$S_A=S_B=S_C$;
- Subtask 3(23 pts):$N \le 100$;
- Subtask 4(51 pts):无特殊限制。
对于 $100\%$ 的数据:
- $1 \le N \le 2 \times 10^5$;
- $S_A,S_B,S_C$ 是只包含 `J`,`O`,`I` 的长度为 $N$ 的字符串;
- $1 \le Q \le 2 \times 10^5$;
- $T_0$ 是只包含 `J`,`O`,`I` 的长度为 $N$ 的字符串;
- $1 \le L_j \le R_j \le N$;
- $C_j \in \{$`J`,`O`,`I`$\}$。
#### 说明
翻译自 [JOI 2020 / 2021 Open Contest A Crossing](http://s3-ap-northeast-1.amazonaws.com/data.cms.ioi-jp.org/open-2021/crossing/2021-open-crossing-statement-en.pdf)。