找出第 k 小的那个
补全 kth:返回第 k 小的值(k 从 1 开始数)。这次找的是第 4 小。 (本题用 g++ -std=c++17 -O0 编译。)
某个区间里有几个
补全 count_range:返回落在 [lo, hi] 区间内(含两端)的节点个数。这次数的是 15 到 23。 (本题用 g++ -std=c++17 -O0 编译。)
某个值排第几
补全 rank_of:返回 val 在这棵树里从小到大排第几(最小的算第 1),不在返回 0。这次问的是 17 排第几。 (本题用 g++ -std=c++17 -O0 编译。)
std::set 内部通常是什么
C++ 标准库的 std::set,内部通常是【0】。
lower_bound 返回什么
第 1 步:set 里的数天生从小到大 第 2 步:20 比 55 小:跳过 第 3 步:30 比 55 小:跳过 第 4 步:50 比 55 小:跳过 第 5 步:lower_bound(55):停在 60 20 30 50 60 70
标准库为何不用普通 BST
标准库的 set / map 不用普通 BST,而用平衡树,是因为【0】。
set 里存了几个谁最小
把 17、24、15、13、23 依次插进一棵空的 BST。运行下面这段程序: #include <iostream> #include <iterator> #include <map> #includ
lower_bound(20) 停在哪
把 17、24、15、13、23 依次插进一棵空的 BST。运行下面这段程序: #include <iostream> #include <iterator> #include <map> #includ
用 lower_bound 数区间
补全:用 lower_bound 和 upper_bound 数出 set 里落在 [15, 23] 之间(含两端)的元素个数。 (本题用 g++ -std=c++17 -O0 编译。)
找比 x 小的最大那个
补全:在 set 里找「严格小于 20 的最大元素」(前驱)。先 lower_bound(20),再往前退一步。 (本题用 g++ -std=c++17 -O0 编译。)