atcoder#ABC223F. [ABC223F] Parenthesis Checking

[ABC223F] Parenthesis Checking

配点 : 500500

問題文

以下のいずれかの条件を満たす文字列を正しい括弧列と定義します。

  • 空文字列
  • ある正しい括弧列 AA が存在して、(, AA, ) をこの順に連結した文字列
  • ある空でない正しい括弧列 AA, BB が存在して、AA, BB をこの順に連結した文字列

() のみからなる長さ NN の文字列 SS があります。

QQ 個のクエリ $\text{Query}_1,\text{Query}_2,\ldots,\text{Query}_Q$ が与えられるので、順番に処理してください。クエリには 22 種類があり、入力形式とクエリの内容は以下の通りです。

  • 1 l r : SSll 文字目と rr 文字目を入れ替える。
  • 2 l r : SSll 文字目から 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 の形式のクエリは 11 つ以上与えられる。

入力

入力は以下の形式で標準入力から与えられる。

NN QQ

SS

Query1\text{Query}_1

Query2\text{Query}_2

\vdots

QueryQ\text{Query}_Q

出力

2 l r の形式の各クエリに対して、連続部分文字列が正しい括弧列である場合 Yes、そうでない場合 No と出力し、改行せよ。

5 3
(())(
2 1 4
2 1 2
2 4 5
Yes
No
No

11 つ目のクエリにおいて、(())正しい括弧列です。

22 つ目のクエリにおいて、((正しい括弧列ではありません。

33 つ目のクエリにおいて、)(正しい括弧列ではありません。

5 3
(())(
2 1 4
1 1 4
2 1 4
Yes
No

11 つ目のクエリにおいて、(())正しい括弧列です。

22 つ目のクエリによって、SS)()(( となります。

33 つ目のクエリにおいて、)()(正しい括弧列ではありません。

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
Yes
No
No