集合动态维护
时间限制:1秒 内存限制:256M
【题目描述】
你需要写一种数据结构,来维护一个集合 \(A\)(元素可重复),需要支持如下操作:
1. Insert(A,x):向集合 \(A\) 中插入一个整数 \(x\)。
2. Delete(A,x):删除集合 \(A\) 中值为整数 \(x\) 的元素,若有多个相同的数,只删除一个,若 \(x\) 不存则忽略。
3. Count(A,x):查询集合中小于 \(x\) 的元素个数。
4. Kth(A,k):查询名次为 \(k\) 的数,这里的名次表示第几小(最小元素排名为 1),相同的数依次排名,名次不并列。
5. Ask(A,x,y):查询集合中属于区间 [x,y] 的元素个数。
特别注意,任何时候集合中的元素都是[0,1000000]范围内的整数!
【输入格式】
第 1 行包含两个整数 \(n,m\),\(n\) 表示最初集合 \(A\) 中元素的个数,\(m\) 表示操作数目。
第 2 行包含 \(n\) 个整数,表示开始集合 \(A\) 中的元素 \(a[1]..a[n]\)。
接下来的 \(m\) 行,每行的第一项分别是 Insert,Delete,Ask,Kth 和 Count 等操作,第二项为操作参数,意义如题目描述。
【输出格式】
对应输入中的Ask,Kth和Count操作,每个操作输出该操作的执行结果。对于Kth操作,如果不能查询到第k小的元素,则输出"invalid"。
【输入输出样例】
Input
5 17
2 6 1 0 3
Kth 3
Insert 4
Count 4
Insert 8
Ask 2 7
Delete 0
Kth 5
Insert 7
Count 7
Delete 1
Insert 10
Insert 5
Delete 6
Ask 1 10
Kth 5
Delete 4
Kth 10
Output
2
4
4
6
5
7
7
invalid
【数据限制】
对于 \(100\%\) 的数据,\(1≤n,m≤200000\)。
【来源】
Mr.he