#ABC341E. 交替字符串

交替字符串

交替字符串

题目描述

由 0 和 1 组成的字符串中,如果任意两个相邻的字符都不同,则称为好字符串。

给定一个由 0 和 1 组成、长度为 NN 的字符串 SS。 接下来有 QQ 个查询,需要按顺序处理。

查询有两种类型:

  • 1 L R:将 SS 的第 LL 到第 RR 个字符全部翻转。即对满足 LiRL \le i \le R 的每个整数 ii,若 SS 的第 ii 个字符是 1 则改为 0,反之亦然。
  • 2 L R:令 SS' 为提取 SS 的第 LL 到第 RR 个字符(保持顺序)得到的长度为 (RL+1)(R-L+1) 的字符串。若 SS' 是好字符串则输出 Yes,否则输出 No

输入格式

输入按以下格式从标准输入给出:

NN QQ
SS
query1query_1
query2query_2
\vdots
queryQquery_Q

每个查询 queryiquery_i (1iQ)(1 \le i \le Q) 以下列两种形式之一给出:

11 LL RR

或:

22 LL RR

输出格式

KK 为类型 2 的查询数量。输出 KK 行。

ii 行应输出对第 ii 个类型 2 查询的应答。

样例

5 6
10100
2 1 3
2 1 5
1 1 4
2 1 5
1 3 3
2 2 4
Yes
No
Yes
No

初始时,S=10100S=10100。按给定顺序处理查询时,过程如下:

  • 第一个查询,提取 SS 的第 1 到第 3 个字符得到的字符串 S=101S'=101。这是好字符串,所以输出 Yes
  • 第二个查询,提取 SS 的第 1 到第 5 个字符得到的字符串 S=10100S'=10100。这不是好字符串,所以输出 No
  • 第三个查询,将 SS 的第 1 到第 4 个字符全部翻转。字符串 SS 变为 S=01010S=01010
  • 第四个查询,提取 SS 的第 1 到第 5 个字符得到的字符串 S=01010S'=01010。这是好字符串,所以输出 Yes
  • 第五个查询,翻转 SS 的第 3 个字符。字符串 SS 变为 S=01110S=01110
  • 第六个查询,提取 SS 的第 2 到第 4 个字符得到的字符串 S=111S'=111。这不是好字符串,所以输出 No
1 2
1
1 1 1
2 1 1
Yes

注意,由单个字符 0 或 1 组成的字符串也满足好字符串的条件。

数据范围

  • 1N,Q5×1051 \le N, Q \le 5 \times 10^5
  • SS 是由 0 和 1 组成、长度为 NN 的字符串
  • 对类型 1 和类型 2 的查询,1LRN1 \le L \le R \le N
  • 至少有一个类型 2 的查询
  • NNQQLLRR 均为整数
难度 提高
通过率
尝试 0
已通过 0
ID
3211
类型
传统题
Time Limit
3000ms
Memory Limit
1024MiB
上传者
标签