二分查找
在一个排好序的数组中查找;
函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置
函数upper_bound()在first和last中的前闭后开区间进行二分查找,返回大于val的第一个元素位置。如果所有元素都小于val,则返回last的位置
lower_bound的源代码
int lower(LL *a,LL n,LL x){
LL l=0,r=n-1;
LL m;
while(l<r){
m=(l+r)/2;
if(a[m]<x) l=m+1;
else r=m;
}
if(a[l]>=x) return l;
else return -1;
}
upper_bound源代码;
int upper(LL *a,LL n,LL x){
LL l=0,r=n-1;
LL m;
while(l<r){
m=(l+r)/2;
if(a[m]<=x) l=m+1;
else r=m;
}
if(a[l]>x) return l;
else return n;
}
如果你想找看一道用二分做的题目 请点here<