STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法

Posted zhwer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法相关的知识,希望对你有一定的参考价值。

以前比较排斥这两个函数,遇到二分都是手写 (while(left<=right))

这次决定洗心革面记录一下这两个函数的在算法竞赛中的用法,毕竟一般不会导致TLE

技术图片

其实百度百科已经概述得比较清楚了,

我们假设 (value) 为一个给定的数值,
(lower\\_bound) 是在一个升序序列中从前后后找第一个大于等于 (value) 的值,
(upper\\_bound) 是在一个升序序列中从前后后找第一个大于 (value) 的值。

比如:(lower\\_bound(a+1,a+n+1,k)) 就是在(a)数组的([1,n])范围(必须升序)里从前到后找第一个大于等于(k)的值,并以指针的形式返回。

注意,这两个函数的返回值都是一个指针,指向原序列中可以插入value,而不会破坏容器顺序的第一个位置。
我们可以在指针函数前面加个取值符 * ,来获得想得到的值。

看到这里,你应该知道lower和upper这两个单词的含义的吧,即将value插入某位置后该序列仍然分别是单调不严格递增单调严格递增的。

举个栗子

int a[]

以上是关于STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法的主要内容,如果未能解决你的问题,请参考以下文章

STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法

upper_bound()和lower_bound()操作,stl库

upper_bound()和lower_bound()操作,stl库

徒手实现lower_bound和upper_bound

Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)

[分治] lower/upper bound(非STL)