#xds3109. Parenthesis Checking

Parenthesis Checking

Parenthesis Checking

时间限制:3 秒 / 内存限制:1024 MB

Description

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

  1. 它是一个空字符串。
  2. 它是由 (, A, ) 按顺序连接而成,其中 A 是一个正确的括号序列。
  3. 它是由 A, B 按顺序连接而成,其中 AB 都是正确的括号序列。

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

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

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

Input

第一行包含两个整数 NNQQ,分别表示字符串 SS 的长度和查询的数量。(1N,Q2×105)(1 \leq N, Q \leq 2 \times 10^5)

第二行包含一个长度为 NN 的字符串 SS,由 () 组成。

接下来 QQ 行,每行包含一个查询,格式为 1 l r2 l r,其中 1l<rN1 \leq l < r \leq N

保证至少有一个查询的格式为 2 l r

Output

对于每个格式为 2 l r 的查询,如果该子串是一个正确的括号序列,则输出 Yes,否则输出 No,每个结果占一行。

Example

Sample Input 1

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

Sample Output 1

Yes
No
No

解释

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

Sample Input 2

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

Sample Output 2

Yes
No

解释

  • 第一个查询中,(()) 是一个正确的括号序列。
  • 第二个查询中,SS 变为 )()((
  • 第三个查询中,)()( 不是一个正确的括号序列。

Sample Input 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

Sample Output 3

Yes
No
No