lower_bound是找到第一个大于等于val的值,没有就返回end
uppder_bound是找到第一个大于val的值,没有就返回end
前提:数组是有序的
用法
template<class ForwardIterator, class Type>
ForwardIterator lower_bound(
ForwardIterator _First,
ForwardIterator _Last,
const Type& _Val
);
template<class ForwardIterator, class Type, class BinaryPredicate>
ForwardIterator lower_bound(
ForwardIterator _First,
ForwardIterator _Last,
const Type& _Val,
BinaryPredicate _Comp
);
参考代码(二分法)
int lower_bound(vector<int> v,int begin,int end,int target){
while(begin < end){
int mid = begin + (end - begin) / 2;
if(v[mid] < target){
begin = mid + 1;
}
else{
end = mid;
}
}
return begin;
}
int upper_bound(vector<int> v,int begin,int end,int target){
while(begin < end){
int mid = begin + (end - begin) / 2;
if(v[mid] <= target){
begin = mid + 1;
}
else{
end = mid;
}
}
return begin;
}