AT_abc223_f [ABC223F] Parenthesis Checking
题目描述
我们将满足以下任一条件的字符串定义为**正确括号序列**。
- 空字符串。
- 存在某个**正确括号序列** $A$,将 `(`、$A$、`)` 按此顺序连接得到的字符串。
- 存在某些非空的**正确括号序列** $A$ 和 $B$,将 $A$、$B$ 按此顺序连接得到的字符串。
给定一个仅由 `(` 和 `)` 组成、长度为 $N$ 的字符串 $S$。
有 $Q$ 个查询 $\text{Query}_1, \text{Query}_2, \ldots, \text{Query}_Q$,请按顺序处理。查询有两种类型,输入格式及内容如下:
- `1 l r`:交换 $S$ 的第 $l$ 个字符和第 $r$ 个字符。
- `2 l r`:判断 $S$ 的第 $l$ 个字符到第 $r$ 个字符组成的连续子串是否为**正确括号序列**。
输入格式
输入按以下格式从标准输入读入。
> $N$ $Q$
> $S$
> $\text{Query}_1$
> $\text{Query}_2$
> $\vdots$
> $\text{Query}_Q$
输出格式
对于每个 `2 l r` 形式的查询,如果对应的连续子串为**正确括号序列**,输出 `Yes`,否则输出 `No`,每个结果占一行。
说明/提示
## 限制条件
- $1 \leq N, Q \leq 2 \times 10^5$
- $S$ 是仅由 `(` 和 `)` 组成的长度为 $N$ 的字符串。
- $1 \leq l < r \leq N$
- $N, Q, l, r$ 均为整数。
- 每个查询均为 `1 l r` 或 `2 l r` 之一。
- 至少有一个 `2 l r` 形式的查询。
## 样例解释 1
第 1 个查询中,`(())` 是**正确括号序列**。
第 2 个查询中,`((` 不是**正确括号序列**。
第 3 个查询中,`)(` 不是**正确括号序列**。
## 样例解释 2
第 1 个查询中,`(())` 是**正确括号序列**。
第 2 个查询后,$S$ 变为 `)()((`。
第 3 个查询中,`)()(` 不是**正确括号序列**。
由 ChatGPT 4.1 翻译