【发布时间】:2019-10-31 15:57:39
【问题描述】:
我有两种类型的查询。
1 X Y
在集合中添加元素 X ,Y 次。
2 N
查询次数
X
Y
在已排序的集合中查找第 N 个元素。
我尝试了 STL 设置,但它不起作用。
我认为我们需要平衡树,每个节点包含两个数据值。
第一个值将是元素 X。另一个将是小于或等于 value 的元素的所有 Y 的前缀总和。
当我们添加元素 X 时,找到第一个值的预处理器。将与预处理器关联的第二个值添加到 Y。
当找到第 N 个元素时。在树(第二个值)中搜索立即低于 N 的值。
如何高效地实现这个数据结构?
【问题讨论】:
-
关于
std:set的简要说明 - 每个值只能保存一份。所以你的第一个案例立即不适合它。 -
你说你想将元素 X 添加到你的容器 Y 次。这不是
set<pair<int,int>>所做的(对于 Y>1),但这是multiset<int>所做的。 -
您使用“预处理器”这个词,我认为您的意思是“前身”。
-
这听起来像是Indexable skip list 的完美应用程序。
-
我们当然可以做到!但它与您给出的问题陈述不符。如果您的意思是“以某种方式将 X 与多次重复相关联”,您可以这么说。
标签: c++ algorithm data-structures