QOJ.ac

QOJ

時間限制: 4.0 s 記憶體限制: 512 MB 總分: 100

#9263. 叛逆序列

统计

括号序列是由左括号和右括号组成的序列。当且仅当满足以下两个条件时,称一个括号序列是平衡的:

  • 它包含相等数量的左括号和右括号;
  • 对于每一个前缀,右括号的数量不大于左括号的数量。

如果一个括号序列包含相等数量的左括号和右括号,且不是平衡的,则称其为“叛逆的”(rebellious)。

给定一个长度为 $n$ 的平衡括号序列和 $q$ 次查询。每次查询要求交换两个括号。保证每次查询后序列仍然保持平衡。

在每次查询后,你需要判断是否可以将该序列拆分为若干个不相交的“叛逆的”子序列。

形式化地,设原序列为 $s_1s_2 \dots s_n$。你需要检查是否存在一个数字 $k > 1$(子序列的数量)以及 $k$ 个非空下标序列 $(i_{1,1} < \dots < i_{1,l_1}), \dots, (i_{k,1} < \dots < i_{k,l_k})$,使得对于每个 $1 \le j \le k$,括号序列 $s_{i_{j,1}}s_{i_{j,2}} \dots s_{i_{j,l_j}}$ 都是“叛逆的”,且 $1$ 到 $n$ 之间的每个整数在这些序列中恰好出现一次。

输入格式

第一行包含两个整数 $n$ 和 $q$ ($1 \le n, q \le 300\,000$),分别表示序列的长度和查询次数。第二行是一个长度为 $n$ 的字符串,由字符 '(' 和 ')' 组成。

接下来 $q$ 行描述查询。每行包含两个整数 $i$ 和 $j$ ($1 \le i < j \le n$),表示交换第 $i$ 个和第 $j$ 个位置上的括号。

保证序列初始时是平衡的,且在每次查询后仍然保持平衡。

输出格式

在每次查询后,如果可以将序列拆分为若干个不相交的“叛逆的”子序列,则输出 “Yes”,否则输出 “No”。

样例

输入 1

8 4
(()()())
3 4
5 6
2 7
6 7

输出 1

No
No
Yes
No

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.