P6864 [RC-03] 记忆
题目背景
小 W 想写一个关于记忆的题目背景,但是他忘记了。
题目描述
有一个括号串 $S$,一开始 $S$ 中只包含一对括号(即初始的 $S$ 为 `()`),接下来有 $n$ 个操作,操作分为三种:
1. 在当前 $S$ 的末尾加一对括号(即 $S$ 变为 `S()`);
2. 在当前 $S$ 的最外面加一对括号(即 $S$ 变为 `(S)`);
3. 取消第 $x$ 个操作,即去除第 $x$ 个操作造成过的**一切影响**(例如,如果第 $x$ 个操作也是取消操作,且取消了第 $y$ 个操作,那么当前操作的实质就是恢复了第 $y$ 个操作的作用效果)。
每次操作后,你需要输出 $S$ 的能够括号匹配的非空子串(子串要求连续)个数。
一个括号串能够括号匹配,当且仅当其左右括号数量相等,且任意一个前缀中左括号数量不少于右括号数量。
输入格式
无
输出格式
无
说明/提示
【样例 $1$ 解释】
用 $S[i,j]$ 表示从 $S_i$ 到 $S_j$ 的子串(下标从 $1$ 开始)。
一开始 $S$ 为 `()`,每次操作后:
第 $1$ 次操作后:$S$ 为 `()()`,匹配的子串有 $S[1,2]$,$S[1,4]$ 和 $S[3,4]$,共 $3$ 个。
第 $2$ 次操作后:$S$ 为 `(()())`,匹配的子串有 $S[1,6]$,$S[2,3]$,$S[2,5]$ 和 $S[4,5]$,共 $4$ 个。
第 $3$ 次操作后:$S$ 为 `(())`,匹配的子串有 $S[1,4]$ 和 $S[2,3]$,共 $2$ 个。
第 $4$ 次操作后:$S$ 为 `(())()`,匹配的子串有 $S[1,4]$,$S[1,6]$,$S[2,3]$ 和 $S[5,6]$,共 $4$ 个。
第 $5$ 次操作后:$S$ 为 `(()())()`,匹配的子串有 $S[1,6]$,$S[1,8]$,$S[2,3]$,$S[2,5]$,$S[4,5]$ 和 $S[7,8]$,共 $6$ 个。
第 $6$ 次操作后:$S$ 为 `(())()`,匹配的子串有 $S[1,4]$,$S[1,6]$,$S[2,3]$ 和 $S[5,6]$,共 $4$ 个。
---
【数据范围】
**本题采用捆绑测试。**
对于全部数据:$1\leq n\leq 2\times 10^5$,$op\in \{1,2,3\}$,$1\leq x\leq n$,一个操作在形式上最多只会被取消一次(即所有 $x$ 互不相同)。
| 子任务编号 | $n\leq$ | $op\in$ | 分值 |
| :--------: | :------------: | :---------: | :--: |
| Subtask 1 | $100$ | $\{1,2,3\}$ | $10$ |
| Subtask 2 | $10^3$ | $\{1,2,3\}$ | $10$ |
| Subtask 3 | $10^5$ | $\{1,2,3\}$ | $30$ |
| Subtask 4 | $2\times 10^5$ | $\{1,2\}$ | $20$ |
| Subtask 5 | $2\times 10^5$ | $\{1,2,3\}$ | $30$ |