在一个从小到大的数组或者向量或者堆中,

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