#abc223f. [abc223_f]Parenthesis Checking

[abc223_f]Parenthesis Checking

题目描述

让我们将一个正确的括号序列定义为满足以下条件之一的字符串。

  • 它是一个空字符串。
  • 它是 (AA) 的连接,其中 AA 是一个正确的括号序列
  • 它是 AABB 的连接,其中 AABB 都是正确的括号序列

我们有一个长度为 NN 的字符串 SS,由 () 组成。

给定 QQ 个查询 $\\text{Query}_1,\\text{Query}_2,\\ldots,\\text{Query}_Q$,按顺序处理它们。有两种类型的查询,格式和内容如下所示。

  • 1 l r:交换 SS 的第 ll 个和第 rr 个字符。
  • 2 l r:确定从第 ll 个到第 rr 个字符之间的连续子串是否是一个正确的括号序列

约束条件

  • 1N,Q2×1051 \leq N,Q \leq 2 \times 10^5
  • SS 是一个长度为 NN,由 () 组成的字符串。
  • 1l<rN1 \leq l < r \leq N
  • N,Q,l,rN,Q,l,r 都是整数。
  • 每个查询都是 1 l r2 l r 的格式。
  • 至少有一个查询是以 2 l r 格式的。

输入

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

NN QQ SS textQuery1\\text{Query}_1 textQuery2\\text{Query}_2 vdots\\vdots textQueryQ\\text{Query}_Q

输出

对于以 2 l r 格式的每个查询,如果连续子串是一个正确的括号序列,则打印 Yes,否则打印 No,并换行。


示例输入 1

5 3
(())(
2 1 4
2 1 2
2 4 5

示例输出 1

Yes
No
No

在第一个查询中,(()) 是一个正确的括号序列

在第二个查询中,(( 不是一个正确的括号序列

在第三个查询中,)( 不是一个正确的括号序列


示例输入 2

5 3
(())(
2 1 4
1 1 4
2 1 4

示例输出 2

Yes
No

在第一个查询中,(()) 是一个正确的括号序列

在第二个查询中,SS 变成了 )()((

在第三个查询中,)()( 不是一个正确的括号序列


示例输入 3

8 8
(()(()))
2 2 7
2 2 8
1 2 5
2 3 4
1 3 4
1 3 5
1 1 4
1 6 8

示例输出 3

Yes
No
No