A84814.午枫的字符串反转
普及+/提高
官方
通过率:0%
时间限制:2.00s
内存限制:512MB
题目描述
小午认为一个字符串中,如果只由 0 和 1 组成,并且字符串中任意连续的 2 个字符都不相同的字符串是好字符串。
现在小午有一个长度为 n 且只由 0 和 1 组成的字符串 s 。他将依次对小枫进行 q 次查询,每个查询有以下两种方式:
1 L R:将 s 的第 L 个字符到第 R 个字符的 0 和 1 反转。即对于满足 L≤i≤R 的整数 i,如果 s 的第 i 个字符为 0,则变为 1,如果为 1,则变为 0 。2 L R:取出 s 的第 L 个字符到第 R 个字符(顺序不变)组成一个长度为 R−L+1 的字符串 S′。如果 S′ 是好字符串,则输出Yes,否则输出No。
输入格式
第一行输入两个整数 n,q (1≤n,q≤5×105) ,分别表示字符串的长度以及询问次数。
第二行输入一个长度为 n 的字符串 s ,保证字符串中只包含 0 ,1 两种字符。
接下来 q 行,每行输入一个查询,每个查询为以下两种形式之一:
1 L R 或 2 L R ,其中 1≤L≤R≤n ,保证至少存在一个类型 2 的查询。含义见题面所示。
输出格式
设第 2 种类型的查询有 K 个,请输出 K 行。
第 i 行输出第 i 个第 2 种类型查询的结果。
输入输出样例
输入#1
5 6 10100 2 1 3 2 1 5 1 1 4 2 1 5 1 3 3 2 2 4
输出#1
Yes No Yes No
输入#2
1 2 1 1 1 1 2 1 1
输出#2
Yes
说明/提示
样例解释 1
初始时,S= 10100。依次处理每个查询如下:
- 对于第 1 个查询,取出 S 的第 1 到第 3 个字符,得到 S′=
101。这是好字符串,输出Yes。 - 对于第 2 个查询,取出 S 的第 1 到第 5 个字符,得到 S′=
10100。这不是好字符串,输出No。 - 对于第 3 个查询,将 S 的第 1 到第 4 个字符的
0和1反转。此时 S=01010。 - 对于第 4 个查询,取出 S 的第 1 到第 5 个字符,得到 S′=
01010。这是好字符串,输出Yes。 - 对于第 5 个查询,将 S 的第 3 个字符的
0和1反转。此时 S=01110。 - 对于第 6 个查询,取出 S 的第 2 到第 4 个字符,得到 S′=
111。这不是好字符串,输出No。
样例解释 2
注意,仅由 0 或 1 组成的长度为 1 的字符串也满足好字符串的条件。