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;
}