CF1858E1 Rollbacks (Easy Version)

题目描述

这是该问题的简单版本。唯一的区别在于,你需要在在线模式下解决困难版本。只有当你同时解决了两个版本的问题时,才能进行 hack。 你有一个初始为空的数组 $a$。你需要处理以下几种类型的操作: - ```+ x``` —— 将整数 $x$ 添加到数组 $a$ 的末尾。 - ```- k``` —— 从数组 $a$ 的末尾移除最后 $k$ 个数。 - ```!``` —— 撤销上一次有效的更改(即使数组 $a$ 恢复到更改前的状态)。在本题中,只有前两种类型(+ 和 -)的操作被视为更改。 - ```?``` —— 查询当前数组 $a$ 中不同数字的个数。

输入格式

第一行包含一个整数 $q$($1 \leq q \leq 10^6$),表示操作的数量。 接下来的 $q$ 行,每行包含一个如上所述的操作。 保证: - 对于第一种操作,$1 \leq x \leq 10^6$; - 对于第二种操作,$k \geq 1$ 且 $k$ 不超过当前数组 $a$ 的长度; - 对于第三种操作,至少存在一个可以被撤销的第一或第二种操作; - 第四种操作(?)的数量不超过 $10^5$。

输出格式

对于每个第四种操作,输出一个整数,表示当前数组 $a$ 中不同元素的个数。

说明/提示

在第一个样例中,数组 $a$ 的变化如下: 1. 第一次操作后,$a=[1]$。 2. 第二次操作后,$a=[1,2]$。 3. 第三次操作后,$a=[1,2,2]$。 4. 第四次操作时,数组 $a$ 中有 $2$ 个不同的整数:$1$ 和 $2$。 5. 第五次操作后,$a=[1,2]$(撤销了 +2 的更改)。 6. 第六次操作后,$a=[1,2,3]$。 7. 第七次操作后,$a=[1]$。 8. 第八次操作时,数组 $a$ 中只有一个 $1$。 9. 第九次操作后,$a=[1,1]$。 10. 第十次操作时,数组 $a$ 中只有两个 $1$。 在第二个样例中,数组 $a$ 的变化如下: 1. 第一次操作后,$a=[1]$。 2. 第二次操作后,$a=[1,1\,000\,000]$。 3. 第三次操作时,数组 $a$ 中有 $2$ 个不同的整数:$1$ 和 $1\,000\,000$。 4. 第四次操作后,$a=[1]$(撤销了 +1000000 的更改)。 5. 第五次操作后,$a=[]$(撤销了 +1 的更改)。 6. 第六次操作时,数组 $a$ 中没有整数,因此答案为 $0$。 由 ChatGPT 4.1 翻译