stl里面封装了挺不错的lower_bound()和upper_bound()。但是有时候条件的判断又得自己写,所以摸索着写了两个函数,还是比较习惯 (low<=high) 的写法
//上界:
int binsearch_low(int lef, int rig,int key,int a[])
{
int ans = -1;
int low = lef,high = rig;
while(low <= high){
int mid = (low + high)/2;
if(key == a[mid]){
ans = mid;
high = mid - 1;
}
else if(key < a[mid])
high = mid - 1;
else
low = mid + 1;
}
return ans;
}
//下界:
int binsearch_up(int lef, int rig,int key,int a[])
{
int ans = -1;
int low = lef,high = rig;
while(low <= high){
int mid = (low + high)/2;
if(key == a[mid]){
ans = mid;
low = mid + 1;
}
else if(key < a[mid]){
high = mid - 1;
}
else{
low = mid + 1;
}
}
return ans;
}