我有一个已排序的数组,使用二分查找(std::upper_bound
)在O(logn)
时间内找到小于特定值的项目数。
现在我想要在保持其排序的同时从该数组中插入和删除。我希望总体复杂度为O(logn)
。
我知道可以使用二叉搜索树或std::multiset
进行插入、删除和上界操作,但我无法以对数时间获取距离/索引(std::distance
对于集合是O(n)
)。
那么有没有办法实现我想做的事情呢?
我有一个已排序的数组,使用二分查找(std::upper_bound
)在O(logn)
时间内找到小于特定值的项目数。
现在我想要在保持其排序的同时从该数组中插入和删除。我希望总体复杂度为O(logn)
。
我知道可以使用二叉搜索树或std::multiset
进行插入、删除和上界操作,但我无法以对数时间获取距离/索引(std::distance
对于集合是O(n)
)。
那么有没有办法实现我想做的事情呢?
std::lower_bound
/std::upper_bound
告诉您插入/删除的位置,您可能会获得更好的性能。 - GalikO(n)
索引/距离更好的解决方案。虽然我认为插入的要求与此相互矛盾。 - Galik