算法竞赛模板 二分查找
①基础二分查找
int BSearch(int R[],int low,int high,int val) { while(low<=high) { int mid=(low+high)/2; if(R[mid]==val) return mid; else if(R[mid]>val) high=mid-1; else low=mid+1; } return -1; }
②lower_bound函数与upper_bound函数
(1) 在使用这两个函数前,必须保证该数组是非递减序列。
(2) lower_bound(begin,end,num):
从数组的begin位置到end-1位置二分查找第一个≥num的元素,找到则返回该元素的地址,不存在则返回end。
(3) upper_bound(begin,end,num):
从数组的begin位置到end-1位置二分查找第一个>num的元素,找到则返回该元素的地址,不存在则返回end。
(4) 通过返回的地址减去起始地址begin,我们就可以得到该元素在数组中的下标。