在一个从小到大的数组或者向量或者堆中,
lower_bound(first,last,k)返回第一个大于等于k的元素位置
upper_bound(first,last,k)返回第一个大于k的元素位置
也就是说,从lower_bound(k)到upper_bound(k)-1这一段都是k
比如,在有序向量中查找一个数:
bool has(vector<int>v, int k)
{
return upper_bound(v.begin(), v.end(), k) != lower_bound(v.begin(), v.end(), k);
}