原理
运用二分的方法进行查找,可以用于逆序对等题目。template出门右转百度。
用法
- lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
- upper_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个 大于 num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。
我们可以使用<functional>里的greater改变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,得到找到数字在数组中的下标。
总之lower_bound会带上这个数字本身啦~