一、 STL函数
- lower_bound()
试图在已排序的 [first, last) 中寻找元素 value。返回一个迭代器,指向第一个“不小于 value”的元素,如果 value 大于 [first, last)内的任何一个元素,则返回 last。实际上,它返回“在不破坏顺序的情况下,可插入 value 的第一个合适位置”。
- upper_bound()
试图在已排序的 [first, last) 中寻找元素 value。返回一个迭代器,如果 value 存在,迭代器将指向最后一个 value 的下一位置。实际上,它会返回“在不破坏顺序的情况下,可插入 value 的最后一个合适位置”。
- binary_search()
返回值为 Bool 类型,如果 [first, last)内有等同于value的元素,便返回 true,否则返回 false。
二、二分搜索实现及分析
三、二分搜索思想的扩展
分析 lower_bound() 函数,其搜索也可转化为“求满足某个条件$C(x)$的最小的$x$"这一问题。而$C(x)$即为$a_{i}\geqslant k$。对于任意满足$C(x)$的$x$,如果所有的${x}‘\geqslant x$也满足$C({x}‘)$的话,我们就可以用二分搜索来求得最小的$x$。
1. 假定一个解并判断是否可行
2.最大化最小值
3.最大化平均值