QOJ.ac

QOJ

実行時間制限: 2.5 s メモリ制限: 1024 MB 満点: 100

#10530. 翻转括号

統計

仅由括号 '(' 和 ')' 组成的字符串,如果满足以下条件之一,则称为平衡的:

  • 字符串 "()" 是平衡的。
  • 两个平衡字符串的连接是平衡的。
  • 当字符串 $s$ 是平衡的时,按顺序连接字符串 "(", $s$, 和 ")" 得到的字符串也是平衡的。

注意,该条件比单纯要求 '(' 和 ')' 的数量相等要严格。例如,"())(()" 不是平衡的。

你的任务是在宇宙射线可能翻转括号方向的严苛条件下,保持字符串处于平衡状态。

初始时给定一个平衡字符串。每次单个括号的方向被翻转时,程序会收到该字符在字符串中的位置。你需要计算并输出最左侧的位置,使得如果翻转该位置的括号,整个字符串能恢复到平衡状态。在你的程序指出需要翻转的括号并使字符串恢复平衡后,下一次宇宙射线会翻转另一个括号,上述步骤会重复多次。

输入格式

输入包含单个测试用例,格式如下:

$N \ Q$ $s$ $q_1$ $\vdots$ $q_Q$

第一行包含两个整数 $N$ 和 $Q$ ($2 \le N \le 300000, 1 \le Q \le 150000$)。第二行是一个长度为 $N$ 的平衡括号字符串 $s$。接下来的 $Q$ 行,每行包含一个整数 $q_i$ ($1 \le q_i \le N$),表示第 $q_i$ 个括号的方向被翻转。

输出格式

对于每次事件 $q_i$,输出为了使字符串恢复平衡,你需要翻转的最左侧括号的位置。

注意,每次输入翻转事件 $q_i$ 都是在之前的翻转 $q_{i-1}$ 及其修复操作之后,在当前字符串状态上进行的。

样例

样例输入 1

6 3
((()))
4
3
1

样例输出 1

2
2
1

样例输入 2

20 9
()((((()))))()()()()
15
20
13
5
3
10
3
17
18

样例输出 2

2
20
8
5
3
2
2
3
18

说明

在第一个样例中,初始状态为 "((()))"。第 4 个括号被翻转,字符串变为 "(((())"。为了保持平衡,你应该翻转第 2 个括号,得到 "()(())"。下一次翻转第 3 个括号是在上一个状态的基础上进行的,得到 "())())"。为了重新平衡,你必须再次改变第 2 个括号,得到 "(()())"。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.