关于lower_bound和upper_bound
共同点
函数组成:
一个数组元素的地址(或者数组名来表示这个数组的首地址,用来表示这个数组的开头比较的元素的地址,不一定要是首地址,只是用于比较的“首”地址)+ 一个数组元素的地址(对应的这个数组里边任意一个元素的地址,表示这个二分里边的比较的”结尾’地址)+ 你要二分查找的那个数。
例如:
lower_bound(r[x].begin(),r[x].end(),l)
upper_bound(r[x].begin(),r[x].end(),R)
区别
lower_bound与upper_bound的返回值是不同的
lower_bound
返回第一个大于等于x的数的地址
例如数组 1 1 1 3 5
而需要找的那个数是,怎么返回呢,
就是返回那个第一个大于 2 的数的地址,就是返回3的位置,那么再有一组数据就是5个数1 1 1 3 5,还是需要找寻2,那么该返回什么呢?就是第一个3的地址.
upper_bound
返回第一个大于x的数的地址
也就是说如果在5个数 1 , 1, 2 , 2 , 4 ,里边寻找3,那么就会返回4的地址
代码
lower_bound
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int k,n=10;
int a[10]={
1,1,1,3,3,5,5,5,