平衡树
时间限制:1秒 内存限制:256M
【题目描述】
设计一种维护集合的数据结构,支持如下操作:
1. Insert \(x\):向集合中插入一个整数 \(x\)。
2. Delete \(x\):删除集合中值为整数 \(x\) 的元素,若有多个相同的数,删除任意一个,若 \(x\) 不存则忽略。
3. Count \(x\):查询集合中小于 \(x\) 的元素个数。
4. Rank \(x\):查询整数 \(x\) 的名次,这里的名次表示第几小(最小的元素排名为 1 ),相同的数依次排名,不并列排名,若有多个相同的 \(x\),输出最小的名次。
5. Kth \(k\):查询名次为 \(k\) 的数,名次的概念同 4。
最开始,集合中已经有 \(n\) 个元素。
【输入格式】
第 1 行包含两个整数 \(n,m\),\(n\) 表示最初集合中元素的个数,\(m\) 表示操作数目。
第 2 行包含 \(n\) 个整数,表示开始集合中的元素 \(a[1]..a[n](|a[i]|≤10^9)\)。
接下来的 \(m\) 行,每行的第一项分别是 Insert,Delete,Rank,Kth 和 Count 等操作,第二项为一个整数,为每个操作的参数,如果参数是 \(x\),则 \(0≤|x|≤10^9\),如果参数是 \(k\) ,则 \(0≤k≤10^9\)。
【输出格式】
对应输入中的 Rank,Kth 和 Count操作,每个操作输出该操作的执行结果,对于 Rank 操作,若集合中不存在 \(x\),则输出 None,对于 Kth 操作,如果不能查询到第 \(k\) 小的元素,则输出"invalid"。
【输入输出样例】
Input
5 24
1 3 5 7 9
Rank 5
Kth 4
Count 4
Insert 6
Insert 10
Insert 0
Delete 7
Delete 3
Rank 9
Kth 1
Kth 6
Count 1
Delete 1
Kth 3
Insert 5
Insert 9
Delete 0
Delete 10
Rank 9
Rank 8
Count 9
Count 0
Count 11
Kth 10
Output
3
7
2
5
0
10
1
6
4
None
3
0
5
invalid
【数据限制】
对于 \(100\%\) 的数据,\(1≤n,m≤200000\)
【来源】
Mr.he**