#P6864. [RC-03] 记忆
[RC-03] 记忆
题目背景
小 W 想写一个关于记忆的题目背景,但是他忘记了。
题目描述
有一个括号串 ,一开始 中只包含一对括号(即初始的 为 ()
),接下来有 个操作,操作分为三种:
-
在当前 的末尾加一对括号(即 变为
S()
); -
在当前 的最外面加一对括号(即 变为
(S)
); -
取消第 个操作,即去除第 个操作造成过的一切影响(例如,如果第 个操作也是取消操作,且取消了第 个操作,那么当前操作的实质就是恢复了第 个操作的作用效果)。
每次操作后,你需要输出 的能够括号匹配的非空子串(子串要求连续)个数。
一个括号串能够括号匹配,当且仅当其左右括号数量相等,且任意一个前缀中左括号数量不少于右括号数量。
输入格式
第一行:一个整数 ,表示操作的个数。
接下来 行:每行先有一个整数 ,表示操作的种类:
若 ,则表示执行了操作 ;
若 ,则表示执行了操作 ;
若 ,接下来还有一个整数 ,表示执行操作 ,取消了第 个操作(操作按 到 编号,保证第 个操作已发生),注意取消操作并不影响任何操作的编号,编号只取决于输入顺序。
输出格式
共 行:第 行输出一个整数 ,表示第 次操作结束后整个括号串的括号匹配的非空子串个数。
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
提示
【样例 解释】
用 表示从 到 的子串(下标从 开始)。
一开始 为 ()
,每次操作后:
第 次操作后: 为 ()()
,匹配的子串有 , 和 ,共 个。
第 次操作后: 为 (()())
,匹配的子串有 ,, 和 ,共 个。
第 次操作后: 为 (())
,匹配的子串有 和 ,共 个。
第 次操作后: 为 (())()
,匹配的子串有 ,, 和 ,共 个。
第 次操作后: 为 (()())()
,匹配的子串有 ,,,, 和 ,共 个。
第 次操作后: 为 (())()
,匹配的子串有 ,, 和 ,共 个。
【数据范围】
本题采用捆绑测试。
对于全部数据:,,,一个操作在形式上最多只会被取消一次(即所有 互不相同)。
子任务编号 | 分值 | ||
---|---|---|---|
Subtask 1 | |||
Subtask 2 | |||
Subtask 3 | |||
Subtask 4 | |||
Subtask 5 |