CF641E Little Artem and Time Machine
题目描述
小阿尔乔姆发明了一台时光机!他可以去往任何时间,但他所有的想法当然都和计算机科学有关。他想把这台时光机应用到一个著名的数据结构上:多重集。
阿尔乔姆想创建一个基础的整数多重集。他希望该数据结构支持三种类型的操作:
1. 向多重集中添加一个整数。需要注意的是,与集合不同,多重集可以存储某个整数的多个实例。
2. 从多重集中删除一个整数。每次只删除该整数的一个实例。阿尔乔姆不希望处理任何异常,所以他假设每次执行删除操作时,该整数在多重集中一定存在。
3. 查询多重集中存储的某个整数的实例个数。
那么时光机的作用是什么呢?阿尔乔姆并不像通常那样一次次对多重集执行操作,他现在可以穿越到不同的时间点,在那个时间点对多重集执行操作。比如如下例子:
- 首先,阿尔乔姆在第 $1$ 个时刻向多重集添加整数 $5$。
- 然后,他在第 $5$ 个时刻向多重集添加整数 $3$。
- 接着,他在第 $6$ 个时刻查询多重集中整数 $5$ 的个数。答案为 $1$。
- 然后,阿尔乔姆回到过去,在第 $4$ 个时刻查询多重集中整数 $3$ 的个数。由于 $3$ 是在第 $5$ 个时刻才添加的,所以在第 $4$ 个时刻 $3$ 的个数为 $0$。
- 接着,他再次回到过去,在第 $3$ 个时刻从多重集中删除 $5$。
- 最后,阿尔乔姆在第 $7$ 个时刻查询多重集中 $5$ 的个数。结果是 $0$,因为我们在第 $3$ 个时刻已经删除了 $5$。
请注意,阿尔乔姆非常讨厌异常,因此他保证每次更改之后,所有的删除操作都只作用于多重集中已经存在的元素。对于第三类询问,在阿尔乔姆发起询问的那个时间点,实时计算结果,并且不受后续对多重集的更改影响。
请帮助阿尔乔姆实现一个可以穿越时空操作的多重集。
输入格式
输入的第一行包含一个整数 $n$($1 \leq n \leq 100000$),表示阿尔乔姆的操作次数。
接下来 $n$ 行,每行包含三个整数 $a_{i}$、$t_{i}$ 和 $x_{i}$($1 \leq a_{i} \leq 3$,$1 \leq t_{i}, x_{i} \leq 10^9$),分别表示操作类型、阿尔乔姆穿越到操作发生的时间点,以及操作涉及到的值。保证所有时间点互不相同,并且在每次操作后,所有一号与二号操作都合法。
输出格式
对于每个查询操作,输出当前多重集中被询问整数在指定时间点的实例个数。
说明/提示
由 ChatGPT 5 翻译