问题链接是:http://www.spoj.com/problems/ORDERSET/en/
在这个问题中,您必须维护一组支持两个基本操作的动态数字
INSERT(S,x):如果x不在S中,则将x插入S中 DELETE(S,x):如果x在S中,则从S中删除x 和两种类型的查询
K-TH(S):返回S的第k个最小元素 COUNT(S,x):返回S小于x的元素数 输入
第1行:Q(1≤Q≤200000),操作次数 在接下来的Q行中,每行的第一个标记是字符I,D,K或C,意味着相应的操作分别是INSERT,DELETE,K-TH或COUNT,后面跟一个空格和一个整数,即该操作的参数。 如果参数是值x,则保证0≤| x | ≤109。如果参数是索引k,则保证1≤k≤109。
输出
对于每个查询,请在一行中打印相应的结果。特别是,对于查询K-TH,如果k大于S中的元素数,则打印单词'无效'。
我想在这里使用一个集合,因为集合中的插入和删除可以在对数时间内完成。但是,我不确定set是否是查找k'th
元素和小于它的元素数量的理想数据结构。我还可以使用哪种DS来实现最佳效果。谢谢!
答案 0 :(得分:0)
set是抽象数据类型,而不是数据结构。哈希表是一种可用于实现集合的数据结构,就像二叉树一样。
说到二叉树,它似乎非常适合您的需求。
如果平衡:快速插入和删除
如果你跟踪子节点数:K-TH和COUNT也应该非常快