AT_soundhound2018_e カッコ列
题目描述
对于一个长度为 $ m $ 的字符串,如果这个字符串仅由字符 `(` 和 `)` 组成,并且这两种字符的数量相等,并且对于任意前 $ i $ 个字符 (`i \leq m`) 来说,`(` 的数量不少于 `)` 的数量,那么我们称这个字符串是匹配的。例如,`(())` 和 `()(()())` 是匹配的字符串,而 `)(`、`())` 和 `abc` 则不是。
我们定义匹配字符串的得分为所有 `)` 的下标之和减去所有 `(` 的下标之和。下标是该字符在字符串中的位置,从左到右编号。例如,字符串 `(())` 的得分是 $ 4 $,字符串 `()(()())` 的得分是 $ 8 $。
字符串的子序列指的是从字符串中选出若干字符,保持字符的顺序不变后组成的新字符串。例如,对于字符串 `())`,其子序列包括空字符串、`())` 和 `()`,但不包括 `)(`。
最初,你会得到一个长度为 $ N $ 的字符串 $ S $。你需要处理 $ Q $ 个询问,每个询问内容如下:
- 给出一个整数 $ k_i $,表示需要反转字符串 $ S $ 中的第 $ k_i $ 个字符。如果该字符是 `(`,反转后变为 `)`;如果是 `)`,则变为 `(`。
- 在字符串修改后,找出所有可能的匹配子序列中的最大得分,并输出这个得分。
输入格式
输入以以下格式给出:
> $ N $ $ Q $ $ S $ $ k_1 $ $ : $ $ k_Q $
输出格式
对于每个询问,输出修改后的字符串中所有可能的匹配子序列的最大得分。
说明/提示
- $ 1 \leq N, Q \leq 10^5 $
- $ S $ 仅由字符 `(` 和 `)` 组成
- $ 1 \leq k_i \leq N $
### 样例解释
通过一系列操作,字符串会依次变为 - `()(((` - `(((((` - `(((()` - `((())`。每次变换后,最大得分的子序列分别是 - `()` - (空字符串) - `()` - `(())`。
**本翻译由 AI 自动生成**