lower_bound/upper_bound使用方法

来源:互联网 发布:怎么制作淘宝网站 编辑:程序博客网 时间:2024/05/18 12:41

设要查找的序列为增序

lower_bound的作用是二分查找求下界,即在前闭后开区间【first,last)中查找值value,返回等于或大于value的第一个位置,若所有元素都小于value,则返回last

upper_bound的作用是二分查找求上界,即在前闭后开区间【first,last)中查找值value,返回大于value的第一个位置,若所有元素都小于value,则返回last


两个函数拥有相同的参数列表:

(区间起始位置first, 区间结束位置last, 要查找的值value)//一定要注意区间是前闭后开!!!


对于返回值要注意:

返回值是位置不假,但一般不能直接拿来用。实际上对于普通数组函数返回值为指针,对于STL里的一些容器返回值为迭代器,因此想要得到数组下标只需要把返回值和起始位置fisrt做差即可,举例:

int pos = lower_bound(a, a + n, value) - a;


然后看一下他们的应用:

Uva 1152 和为0的4个值 https://vjudge.net/problem/UVA-1152

数据太大,无法四重循环解决,所以可以用x【】记录所有a【】 + b【】的值的相反数,用y【】记录所有c【】 + d【】的值,然后对对于每一个x,在y【】中二分查找进行判断

现在问题来了,如果一个x在y【】中有多个映射,根据题目要求应该都进行统计,但是普通的二分查找只能统计一次,这样的话结果必然会出错

现在两个函数就起作用了,x在y【】中的所有映射就是x在y【】中的上界减去x在y【】中的下界,调用这两个函数做差就可以完美避免这个问题了

这里要保证y【】是增序,快排即可

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 4000 + 10;int n;int a[maxn], b[maxn], c[maxn], d[maxn];int x, y[maxn * maxn];void solve() {    int cnt = 0;    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {            y[cnt++] = c[i] + d[j];        }    }    sort(y, y + cnt);    int ans = 0;    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {            x = -(a[i] + b[j]);            ans += upper_bound(y, y + cnt, x) - lower_bound(y, y + cnt, x);        }    }    printf("%d\n", ans);}int main(){    int T, flag = 0; cin >> T;    while (T--) {        cin >> n;        for (int i = 0; i < n; i++) {            cin >> a[i] >> b[i] >> c[i] >> d[i];        }        if (flag++) printf("\n");        solve();    }    return 0;}




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老人大便干燥拉不出来怎么办 海底捞排队过号怎么办 脱毛后吃了海鲜怎么办 脂肪填充变丑了怎么办 全切双眼皮伤口长包怎么办 鼻综合修复眼中心修太宽怎么办 fgo的id忘了怎么办 电脑下载模拟器显示内存不够怎么办 安逍遥模拟器运行一段时间卡怎么办 pos机微信支付签到失败怎么办 逆水寒fps过低怎么办 电脑卡怎么办怎么清理磁盘 苹果手机设置找不到了怎么办 苹果手机自动拨出电话怎么办 机械键盘灯坏了怎么办 黄金塔花叶子卷怎么办 办的宽带不用了怎么办 取卵后3天还出血怎么办 取卵后腹水怎么办9天了 取卵后第三天肚子涨第天移植怎么办 取卵移植后肚子涨怎么办 没有成熟的卵泡不排卵怎么办 产后9年妊娠纹痒怎么办 手机屏幕锁了忘记密码怎么办 电脑被黑客锁屏怎么办 r9解锁密码忘了怎么办 oppor9开机密码忘了怎么办 vivo手机忘记解锁图案怎么办 oppor9s解锁图案忘了怎么办 oppor9图案解锁忘记了怎么办 oppor9解锁图案忘了怎么办 oppor9s锁屏密码忘了怎么办 oppor9s忘记锁屏图案怎么办 oppor9忘记锁屏图案怎么办 电脑锁屏卡住了怎么办 dell电脑密码忘了怎么办 dell电脑密码忘记了怎么办 手机锁屏为什么打不开怎么办 手机图形解锁忘记了怎么办 华硕电脑锁屏了怎么办 5s忘记解锁密码怎么办