AT_code_festival_exhibition_b カッコつけ

题目描述

高桥君热衷于“加括号”。他喜欢在一个只由开括号 `(` 和闭括号 `)` 组成的字符串中增添或删除括号。对于每个字符串,我们定义一个称为“括号不良度”的值,它表示为了使字符串变得“完美”而必须删除的最小字符数。如果一个字符串中的括号匹配没有问题,我们称其为“完美”。特别地,空字符串也被视为“完美”。 例如,字符串 `()()(())` 是“完美”的,其“括号不良度”为 $0$。而对于 `())`,移除最后一个括号后变得“完美”,因此其“括号不良度”为 $1$。 高桥君从朋友那里得到一个字符串 $S$。他将在这个字符串中进行括号的插入或删除操作。有时,高桥君会对当前字符串一部分的“括号不良度”感到好奇。每当高桥君提出这个问题时,你需要计算并输出有关部分的“括号不良度”。

输入格式

输入通过标准输入给出,格式如下: > $Q$ > $S$ > $x_1$ $y_1$ $z_1$ > ... > $x_Q$ $y_Q$ $z_Q$ - 第一行是高桥君进行的操作(包括询问)的次数 $Q\ (1 \le Q \le 10^5)$。 - 第二行是高桥君得到的字符串 $S\ (1 \le |S| \le 10^5)$。 - 接下来的 $Q$ 行分别描述了每步操作: - 如果 $x_i$ 为 `(`,表示在位置 $y_i$ 插入一个开括号,此时 $z_i$ 恒为 $0$。 - 如果 $x_i$ 为 `)`,表示在位置 $y_i$ 插入一个闭括号,此时 $z_i$ 恒为 $0$。 - 如果 $x_i$ 为 `D`,表示删除位置 $y_i$ 的字符,此时 $z_i$ 恒为 $0$。 - 如果 $x_i$ 为 `Q`,表示询问从位置 $y_i$ 到 $z_i$(包括 $y_i$ 和 $z_i$)间字符串的“括号不良度”。 输入保证不涉及删除或询问不存在的位置,亦不会在非法位置进行插入。所有位置索引均为从1开始计数。

输出格式

每次高桥君进行询问时,需输出对应的“括号不良度”结果,每个结果占一行。 ### 样例解释 1 - 第 1 步操作后的字符串是 `()` - 第 2 步操作后的字符串是 `())` - 第 3 步操作的询问部分是 `()`,其“括号不良度”为 $0$ - 第 4 步操作后的字符串是 `(())` - 第 5 步操作的询问部分是 `())`,其“括号不良度”为 $1$ ### 样例解释 2 - 第 1 步操作后的字符串是 `((()()(()` - 第 2 步操作后的字符串是 `(((()()(()` - 第 3 步操作后的字符串是 `((()()(()` - 第 4 步操作的询问部分是 `(()()`,其“括号不良度”为 $0$ - 第 5 步操作后的字符串是 `((())()(()` - 第 6 步操作后的字符串是 `((())()()` - 第 7 步操作的询问部分是 `((())()()`,其“括号不良度”为 $0$ - 第 8 步操作后的字符串是 `(((())()()` - 第 9 步操作后的字符串是 `(((())())()` - 第 10 步操作后的字符串是 `(((())()))` - 第 11 步操作的询问部分是 `))()))`,其“括号不良度”为 $4$ **本翻译由 AI 自动生成**

说明/提示

### Sample Explanation 1 $ 1 $ 回目の操作が終わったあとの状態は `()` $ 2 $ 回目の操作が終わったあとの状態は `())` $ 3 $ 回目の操作で質問されている範囲の文字列は `()` $ 4 $ 回目の操作が終わったあとの状態は `(())` $ 5 $ 回目の操作で質問されている範囲の文字列は `())` ### Sample Explanation 2 $ 1 $ 回目の操作が終わったあとの状態は `((()()(()` $ 2 $ 回目の操作が終わったあとの状態は `(((()()(()` $ 3 $ 回目の操作が終わったあとの状態は `((()()(()` $ 4 $ 回目の操作で質問されている範囲の文字列は `(()()` $ 5 $ 回目の操作が終わったあとの状態は `((())()(()` $ 6 $ 回目の操作が終わったあとの状態は `((())()()` $ 7 $ 回目の操作で質問されている範囲の文字列は `((())()()` $ 8 $ 回目の操作が終わったあとの状態は `(((())()()` $ 9 $ 回目の操作が終わったあとの状態は `(((())())()` $ 10 $ 回目の操作が終わったあとの状態は `(((())()))` $ 11 $ 回目の操作で質問されている範囲の文字列は `))()))`