我需要一种能够快速(log N)计算小于某个值/修改值的元素数量的结构。我知道使用R-B树或类似的树很容易,但我想通过使用STL来节省时间,STL已经实现了这些树。但是,我找不到任何可以做我需要的功能 - 它是否可能,可能使用某种技巧?我知道它需要在每个子树中存储元素的数量,这可能不会正常。
答案 0 :(得分:3)
您可以使用简单的排序向量或数组执行此操作:
std::vector<int> V;
// (fill V with values)
std::sort(V.begin(), V.end());
int numValsLessThan5 = std::lower_bound(V.begin(), V.end(), 5) - V.begin();
int numValsLessThanOrEqualTo5 = std::upper_bound(V.begin(), V.end(), 5) - V.begin();
upper/lower_bound
在支持随机访问的容器上使用时具有对数复杂度。