我遇到了以下问题:
假设我有一个名为Numbers的std::set,其中包含n个值。我想插入第(n+1)个值(等于x),我事先知道它尚未在集合中。我需要的是一种检查方式,它将被插入到哪个位置,或者说,已经包含在Numbers中的小于x的元素有多少。
我肯定知道一些以O(n)的方式完成它的方法,但我需要的是O(log(n))。理论上可能是可能的,因为std::set通常实现为二叉搜索树(只有在每个顶点存储每个子树大小的信息时,才可能是O(log(n)))。问题是它是否技术上可行,如果是,如何做到。
假设我有一个名为Numbers的std::set,其中包含n个值。我想插入第(n+1)个值(等于x),我事先知道它尚未在集合中。我需要的是一种检查方式,它将被插入到哪个位置,或者说,已经包含在Numbers中的小于x的元素有多少。
我肯定知道一些以O(n)的方式完成它的方法,但我需要的是O(log(n))。理论上可能是可能的,因为std::set通常实现为二叉搜索树(只有在每个顶点存储每个子树大小的信息时,才可能是O(log(n)))。问题是它是否技术上可行,如果是,如何做到。