#P14813. [Bulgarian2017组队赛]Consistency

    ID: 14029 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 5 上传者: 标签>CF1800线段树字符串哈希字符串数据结构

[Bulgarian2017组队赛]Consistency

题目描述

Eli 在下载某个著名吸血鬼电视剧的新一集时,突然想到:她怎么知道自己下载的真的是这一集,而不是一个可执行文件,一旦点击就会导致人类灭亡?

经过一些研究,她发现 tracker 系统使用了一种巧妙的方法来检查文件的某些部分是否一致。于是 Eli 想知道:它们究竟是怎么做到的?

一方面为了给她留下深刻印象,另一方面你也很想看这一集,而 Eli 又害怕点击这个文件会引发世界末日,于是你决定编写程序 consistency,高效完成这种一致性检查。

在本题中,我们把文件看作字符串。字符串只由以下字符组成:

'A' - 'Z', 'a' - 'z', '0' - '9', '+', '/'

也就是字母表:

{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}

输入格式

第一行输入两个整数 N,MN,M,表示两个字符串的长度。

第二行输入长度为 NN 的字符串,表示第一个文件的初始内容。

第三行输入长度为 MM 的字符串,表示第二个文件的初始内容。

两个字符串都只包含上述字母表中的字符。

接下来输入一个整数 QQ,表示文件修改操作和一致性询问的总数。

接下来 QQ 行,每行是以下三种格式之一:

  • 1 X C:把第一个字符串中位置 XX 的字符修改为 C
  • 2 Y C:把第二个字符串中位置 YY 的字符修改为 C
  • 3 K X Y:询问第一个字符串中从位置 XX 开始、长度为 KK 的子串,与第二个字符串中从位置 YY 开始、长度为 KK 的子串是否相同。

所有下标均从 00 开始。

输出格式

对于每个类型为 3 的询问,单独输出一行:

  • 若两个子串相同,输出 YES
  • 否则输出 NO

数据范围

  • 1N,M,Q1000001 \le N,M,Q \le 100\,000
  • 对每个询问,保证 0X<X+KN0 \le X < X+K \le N
  • 对每个询问,保证 0Y<Y+KM0 \le Y < Y+K \le M

样例

输入

30 27
Z29vZGpvYmZvcmRlY29kaW5ndGhpcw
Y29kaW5naXNlbGx5c3Bhc3Npb24
10
3 8 16 0
3 10 16 0
1 25 X
3 10 16 0
2 8 d
3 10 16 0
1 0 Y
3 3 0 0
3 2 28 20
3 1 28 20

输出

YES
NO
NO
YES
YES
NO
YES

样例说明

第一次询问比较第一个字符串中的 Y29kaW5n 和第二个字符串中的 Y29kaW5n。二者相同,因此输出 YES

第二次询问长度稍长,比较的是 Y29kaW5ndGY29kaW5naX,二者不同,因此输出 NO

之后有两次修改:把第一个字符串第 2525 位的 G 改为 X,以及把第二个字符串第 88 位的 a 改为 d。第一次修改后相关子串仍然不同,第二次修改后变为相同。