问题 3246 --音符序列(seq)

3246: 音符序列(seq)

时间限制: 1 Sec  内存限制: 256 MB
提交: 1  解决: 0
[提交][状态][讨论版][命题人:]

题目描述

在一个音乐创作和分析系统中,音乐旋律可以用一个由小写英文字母组成的字符串来表示,每个字母代表一个特定的音符。现在有一个音乐音符序列字符串 S (只包含小 写字母),其长度为 N。 系统会对这个音乐音符序列进行一系列的操作和验证,总共有 Q 个查询,这些查询 需要按顺序依次处理。 每个查询分为以下两种类型:

 • ‘1 x c‘ :表示对音乐音符序列 S 进行一次音符修改操作。具体来说,就是将 S 中 第 x 个位置的音符替换为新的音符 c (小写字母)。 

• ‘2 l r‘ :表示进行一次旋律片段验证操作。系统会将当前的音乐音符序列 S 中的字符按照升序排列,得到一个新的字符串 T。然后,需要验证 S 中从第 l 个字符到第 r 个字符所构成的音符子串是否是 T 的一个子串。如果是,则输出 ‘Yes‘;否则输出 ‘No‘。 

什么是子串?S 的一个 ** 子串 ** 是指通过删除 S 的前导字符和尾随字符中的 0 个 或多个而得到的字符串。例如,‘ab‘ 是 ‘abc‘ 的子串,而 ‘ac‘ 不是 ‘abc‘ 的子串。

 例如,假设初始的音乐音符序列字符串 ‘S = ”abcde”‘,如果执行查询 ‘1 3 f‘,那么 S 就会更新为 ‘S = ”abfde”‘。接着如果执行查询 ‘2 1 3”‘,此时将 S 按升序排列得到 ‘T = ”abdef”‘,而 S 中从第 1 个字符到第 3 个字符构成的音符子串是 ‘”abf”‘,它是 T 的子串,所以会输出 ‘Yes‘。

输入

第一行输入一个整数 N 。 

第二行输入一个字符串 S。 

第三行输入一个整数 Q。 

接下来输入 Q 行,每行输入一个询问,格式如题面所述。 

输出

对每个询问,输出 ‘Yes‘ 或 ‘No‘。

样例输入

6
abcdcf
4
2 1 3
2 2 6
1 5 e
2 2 6


样例输出

Yes
No
Yes

提示


【样例 1 解释】 



在第 1 个查询中,通过将字符串 S 的字符按升序排序得到的字符串 T 为 ‘abccdf‘。
由 S 的第 1 个到第 3 个字符组成的字符串 ‘abc‘是 T 的一个子串,所以应该输出 ‘Yes‘。 



在第 2 个查询中,通过将字符串 S 的字符按升序排序得到的字符串 T 为 ‘abccdf‘。
由 S 的第 2 个到第 6 个字符组成的字符串 ‘bcdcf‘不是 T 的一个子串,所以应该输出
‘No‘。 



第 3 个查询将 S 的第 5 个字符设置为 ‘e‘,使得 S 变为 ‘abcdef‘。
在第 4 个查询中,通过将字符串 S 的字符按升序排序得到的字符串 T 为 ‘abcdef‘。
由 S 的第 2 个到第 6 个字符组成的字符串 ‘bcdef‘是 T 的一个子串,所以应该输出 ‘Yes‘。 



【数据范围】 



数据约束和子任务 



1 ≤ N ≤ 10^5
S 是长度为 N 的字符串,由小写英文字母组成。
1 ≤ Q ≤ 10^5
对于每个第一类查询,1 ≤ x ≤ N 。
对于第一种查询,c 是一个小写英文字母。
对于每个第二类查询,1 ≤ l ≤ r ≤ N 。 

来源

[提交][状态]