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 翻译