set + nth element:快速实现

a-z*_*a-z 2 c++ algorithm

对于以下数据结构:

  • 在O(lg(n))中添加一个元素
  • 删除O中的元素(lg(n))
  • 找到O(lg(n))中的第k个元素

我们可以使用一个平衡的BST,每个节点都有它的子树大小,但是它需要实现红黑树,这对于代码来说并不快.

更好的解决方案?

Mat*_* M. 7

您正在寻找的一般类型的结构是使用IndexedIndexable限定的,这是一个增加了count的结构,可以通过索引访问元素.

你可以使用:

(也许还有其他几个:p)

我倾向于认为Skip-Lists比BST更容易实现,因为你可以使用随机高度而不是所有平衡的东西.