#P1033. 可清空动态多重集合

可清空动态多重集合

题目:可清空动态多重集合

题目描述

维护一个多重集合 SS(允许重复元素),支持三种操作:

  • I v:向集合加入一个整数 vv
  • Q x:询问集合中「x\le x」的元素个数,并输出该数量。
  • C:清空集合(令 S=S=\varnothing)。

输入格式

  • 第一行一个整数 QQ(操作数量)。

  • 接下来 QQ 行,每行是一条操作,形式为:

    • I v109v109-10^9 \le v \le 10^9
    • Q x109x109-10^9 \le x \le 10^9
    • C

输出格式

  • 对于每条 Q x 操作,输出一行一个整数,表示当前集合中「x\le x」的元素个数。

样例

输入

10
I 3
I 1
Q 2
I 2
Q 2
I 2
Q 2
C
Q 100
Q -5

输出

1
2
3
0
0

说明

  • 清空后集合为空,再次查询的结果与空集一致。
  • 你可以用任意数据结构实现;若采用分批排序+归并(如题干代码思路),注意在 Q x 时需要返回「x\le x」的计数(即 upper_bound(x))。

规模与数据梯度(建议)

Q8×105Q\leq 8\times10^5