头文件: #include<algorithm>
对于一个数组 a[] 要求a[] 数组有序
upper_bound(a+i,a+j,x)-a //返回第一个大于x的数的位置
low_bound(a+i,a+j,x)-a //返回的是第一个大于等于x的数的位置
例
a[]={1,2,3,4,4,4,4,5}
upper_bound(a,a+8,4) //返回7
low_bound(a,a+8,4) //返回3
这两个算法其实是采用的二分查找
upper_blound
void uppper_blound(int l,int r,int x){
while(l<r){
int mid=(r-l)/2;
if(a[mid]>x) r=mid;
else l=mid+1;
}
}
low_bound
void low_bound(int l,int r,int x){
while(l<r){
int mid=(r-l)/2;
if(a[mid]>=x) r=mid;
else l=mid+1;
}
}