问题链接是: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 COUNT(S,x)的第k个最小元素:返回输入的小于x的S的元素个数
第1行:Q (1≤Q≤200000),接下来Q行中的操作数,每行的第一个标记是字符I、D、K或C,表示相应的操作分别是插入、删除、第K或计数,后跟一个空格和一个整数,这是该操作的参数。如果参数是值x,则保证0≤|x|≤109。如果参数是索引k,则保证1≤k≤109。
输出
对于每个查询,在一行中打印相应的结果。特别是,对于查询K-TH,如果k大于S中的元素数量,则打印单词“invalid”。
我想在这里使用集合,因为在集合中的插入和删除可以在对数时间内完成。但是,我不确定set是否是查找k'th
元素和少于它的元素数量的理想数据结构。我可以使用哪些其他DS来使其达到最优。谢谢!
发布于 2015-11-09 10:46:25
set是一种抽象数据类型,而不是数据结构。哈希表是一种可用于实现集合的数据结构,就像二叉树一样。
说到二叉树,它似乎很适合你这里的需要。
如果平衡:快速插入和删除
如果您跟踪子节点count : K-TH和COUNT也应该非常快
https://stackoverflow.com/questions/33606129
复制