lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找。
在从小到大的排序数组中,
- lower_bound(begin, end, num); 从数组的begin位置到end-1
位置二分查找第一个大于等于num的数字,找到返回该数字的地址,不存在返回end。通过返回的地址减去起始地址begin,得到数字在数组中的下标。 - upper_bound(begin, end, num); 从数组的begin位置到end-1
位置二分查找第一个大于num的数字,找到返回该数字的地址,不存在返回end。通过返回的地址减去起始地址begin,得到数字在数组中的下标。
在从大到小的排序数组中,
重载lower_bound()和upper_bound()
-
lower_bound( begin,end,num,greater< type>() ):从数组的begin位置到end-1位置二分查找第一个小于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
-
upper_bound( begin,end,num,greater< type>() ):从数组的begin位置到end-1位置二分查找第一个小于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn= 1e5+7;
#define long long ll
bool cmp