在c ++中,以排序顺序存储其元素的std::set
可以在O(log n)时间内插入元素。但我所知道的所有方法都需要线性时间:
在数组的末尾插入元素并将其与前一个元素交换,直到前一个元素小于它 - 需要线性时间。
在数组上使用二进制搜索并找到要插入的元素位置的位置:花费O(log n)时间,但在最坏的情况下将元素插入给定位置需要O(n)时间。
如果我们使用排序数组作为堆,我们可以在O(log n)时间内插入一个元素,但即使数组在此之后仍然是一个堆,也不能保证它仍然是有序的。
我需要一个方法在O(log n)时间内在排序数组中插入一个元素,我知道这是可能的,因为std::set
可以做到,但我不知道如何。