Alice and Bod
题号:NC266429
时间限制:C/C++/Rust/Pascal 6秒,其他语言12秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

AliceBob 正在玩一个最近兴起的游戏,名为死亡对称,一人进攻一人防守,进攻方可以进攻 m 次,m 次后如果防守成功则防守方获胜,否则进攻方获胜。

Alice 防守,Bob 进攻。

具体规则如下,给定一个长度为 n 的字符串,进攻方 Bob 每次可以进行如下两种操作的一种。

  1. 1 l r 向 Alice 询问一段字符串的子串 s[l, r] 是否是对称的,即要求 s_{l + i} = s_{r - i} (0 \leq i \leq r - l)
  2. 2 l r x 将给定字符串的子串 s[l, r] 一段的每个字符同时变成它在字典序中后面的第 x (0 \le x \le 10^9) 个字符,并且规定 z 在字典序中后面的第 1 个字符为 a

Alice 很想赢得这个游戏,但是他对于字符串一窍不通,希望得到你的帮助,在每次询问时做出正确的答案。

输入描述:

第一行输入两个整数 n(1\le n \le 10^5),m(1\le m \le 10^5) 分别表示字符串的长度和进攻次数。

第二行输入一个长度为 n 的字符串 s,保证全部由小写字母构成。

接下来输入 m 行,每行表示一个操作。

输出描述:

对于每次 Bob 的第一种进攻,若是对称的则输出 YES ,否则输出 NO。
示例1

输入

复制
3 5
aaz
1 1 3
2 3 3 1
1 1 2
2 1 3 1
1 1 3

输出

复制
NO
YES
YES

说明

第一次操作时,字符串为 aaz ,子串 s[1...3] ,为 aaz , 并不对称,输出NO
第二次操作,字符串变为 aaa
第三次操作时,字符串为 aaa ,子串 s[1...2] 为 aa ,对称,输出YES
第四次操作,字符串变为 bbb 
第五次操作,字符串为 bbb ,子串 s[1...3] ,为 bbb ,是对称的,输出YES