在一个音乐创作和分析系统中,音乐旋律可以用一个由小写英文字母组成的字符串来表示,每个字母代表一个特定的音符。现在有一个音乐音符序列字符串 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‘。