#P6864. [RC-03] 记忆

[RC-03] 记忆

背景

小 W 想写一个关于记忆的题目背景,但是他忘记了。

题目描述

有一个括号串 SS,一开始 SS 中只包含一对括号(即初始的 SS 为 ()),接下来有 nn 个操作,操作分为三种:

  1. 在当前 SS 的末尾加一对括号(即 SS 变为 S());

  2. 在当前 SS 的最外面加一对括号(即 SS 变为 (S));

  3. 取消第 xx 个操作,即去除第 xx 个操作造成过的一切影响(例如,如果第 xx 个操作也是取消操作,且取消了第 yy 个操作,那么当前操作的实质就是恢复了第 yy 个操作的作用效果)。

每次操作后,你需要输出 SS 的能够括号匹配的非空子串(子串要求连续)个数。

一个括号串能够括号匹配,当且仅当其左右括号数量相等,且任意一个前缀中左括号数量不少于右括号数量。

输入格式

第一行:一个整数 nn,表示操作的个数。

接下来 nn 行:每行先有一个整数 opop,表示操作的种类:

若 op=1op=1,则表示执行了操作 11;

若 op=2op=2,则表示执行了操作 22;

若 op=3op=3,接下来还有一个整数 xx,表示执行操作 33,取消了第 xx 个操作(操作按 11 到 nn 编号,保证第 xx 个操作已发生),注意取消操作并不影响任何操作的编号,编号只取决于输入顺序。

输出格式

共 nn 行:第 ii 行输出一个整数 ansians_i,表示第 ii 次操作结束后整个括号串的括号匹配的非空子串个数。

6
1
2
3 1
1
3 3
3 5

3
4
2
4
6
4

10
1
2
2
3 2
1
3 3
3 6
1
2
1

3
4
5
4
6
6
6
9
10
12

提示

【样例 11 解释】

用 S[i,j]S[i,j] 表示从 SiS_i 到 SjS_j 的子串(下标从 11 开始)。

一开始 SS 为 (),每次操作后:

第 11 次操作后:SS 为 ()(),匹配的子串有 S[1,2]S[1,2],S[1,4]S[1,4] 和 S[3,4]S[3,4],共 33 个。

第 22 次操作后:SS 为 (()()),匹配的子串有 S[1,6]S[1,6],S[2,3]S[2,3],S[2,5]S[2,5] 和 S[4,5]S[4,5],共 44 个。

第 33 次操作后:SS 为 (()),匹配的子串有 S[1,4]S[1,4] 和 S[2,3]S[2,3],共 22 个。

第 44 次操作后:SS 为 (())(),匹配的子串有 S[1,4]S[1,4],S[1,6]S[1,6],S[2,3]S[2,3] 和 S[5,6]S[5,6],共 44 个。

第 55 次操作后:SS 为 (()())(),匹配的子串有 S[1,6]S[1,6],S[1,8]S[1,8],S[2,3]S[2,3],S[2,5]S[2,5],S[4,5]S[4,5] 和 S[7,8]S[7,8],共 66 个。

第 66 次操作后:SS 为 (())(),匹配的子串有 S[1,4]S[1,4],S[1,6]S[1,6],S[2,3]S[2,3] 和 S[5,6]S[5,6],共 44 个。


【数据范围】

本题采用捆绑测试。

对于全部数据:1≤n≤2×1051\leq n\leq 2\times 10^5,op∈{1,2,3}op\in \{1,2,3\},1≤x≤n1\leq x\leq n,一个操作在形式上最多只会被取消一次(即所有 xx 互不相同)。

子任务编号 n≤n\leq op∈op\in 分值
Subtask 1 100100 {1,2,3}\{1,2,3\} 1010
Subtask 2 10310^3
Subtask 3 10510^5 3030
Subtask 4 2×1052\times 10^5 {1,2}\{1,2\} 2020
Subtask 5 {1,2,3}\{1,2,3\} 3030