当前位置: 首页 > news >正文

最全、最清晰、C++的 lower_bound / upper_bound 总结

最全、最清晰的 lower_bound / upper_bound 总结,包含:

✔ 功能解释(通俗 + STL 定义)
✔ 返回值含义
✔ 典型代码例子
✔ 在竞赛中的常用技巧
✔ 与 equal_range 的关系
✔ 可视化图示


🔵 1. lower_bound / upper_bound 是什么?

它们是 STL 中的 二分查找算法,要求区间 有序(非降序)


🔶 2. lower_bound

✔ 定义

iterator lower_bound(iterator first, iterator last, const T& value)

✔ 作用

找到第一个 ≥ value 的位置

✔ 返回值

  • 返回指向 第一个 ≥ value 的迭代器
  • 如果不存在,则返回 last

✔ 举例

vector<int> v = {1,2,4,4,4,7,9};
auto it = lower_bound(v.begin(), v.end(), 4);
// it 指向第一个 4(下标 2)

视觉化:

索引:   0 1 2 3 4 5 6
值:     1 2 4 4 4 7 9↑
lower_bound(v, 4) = index 2

🔶 3. upper_bound

✔ 定义

iterator upper_bound(iterator first, iterator last, const T& value)

✔ 作用

找到第一个 > value 的位置

✔ 返回值

  • 返回指向 第一个 > value 的迭代器
  • 如果不存在,则返回 last

✔ 举例

auto it = upper_bound(v.begin(), v.end(), 4);
// it 指向 7(下标 5)

视觉化:

索引:   0 1 2 3 4 5 6
值:     1 2 4 4 4 7 9↑
upper_bound(v, 4) = index 5

🔵 4. lower_bound 与 upper_bound 的总结表

函数名 找到的位置
lower_bound(a,a+n,x) 第一个 ≥ x 的元素
upper_bound(a,a+n,x) 第一个 > x 的元素

🔵 5. 典型用法:查找元素出现次数

int cnt = upper_bound(v.begin(), v.end(), x) - lower_bound(v.begin(), v.end(), x);

例如:v = {1,2,4,4,4,7,9}

查 4:

lower_bound = index 2
upper_bound = index 5
出现次数 = 5 - 2 = 3

🔵 6. 典型竞赛用法

✔ (1) 在有序数组中插入某个值的位置

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

✔ (2) 二分查找某个区间内的数量

如查询 (L, R] 区间内有多少个数字:

cnt = upper_bound(v.begin(), v.end(), R)- upper_bound(v.begin(), v.end(), L);

✔ (3) LIS(最长上升子序列)

LIS 模板里就是用 lower_bound 找替换位置。


🔵 7. equal_range = lower_bound + upper_bound

auto p = equal_range(v.begin(), v.end(), x);
// p.first  = lower_bound
// p.second = upper_bound

🔵 8. 在 set / multiset 中也能用 lower_bound / upper_bound

例如:

set<int> s = {1, 3, 5, 7};
auto it = s.lower_bound(4);  // 指向 5

http://www.gsyq.cn/news/66425.html

相关文章:

  • Mysql基础3 - 实践
  • 2025-12-01-Nature 本周最新文献速递
  • DevOps设备链对比,Azure 和 TikLab哪款更好用?
  • Python 日期时间操作笔记
  • The country with the largest area in the world
  • 田径赛场飞驰 球类竞技闪耀
  • 一加ACE5 安装类原生系统 crDroid 12
  • 绿茵赛场逐梦 热血竞技铸辉煌
  • 在cline中使用多个OpenAI Compatible
  • 2025年11月景区饮品供应商推荐榜单:一份基于市场数据与用户口碑的权威选择指南
  • 成膜助剂批发商精选,厂家、供货商及制造商汇总:TOP10名单权威推荐
  • 单片机按键扫描
  • Windows11恢复经典样式右键菜单
  • 完整教程:微服务SpringCloud报错合集
  • IT审计的未来
  • 在Vscode中新建CPP代码模板
  • 过碳酸钠供应商哪家好?过碳酸钠厂家权威推荐:厂家、批发商及制造商推荐
  • 成膜助剂哪家好?成膜助剂供货商推荐!精选厂家、制造商与优质批发商
  • 天气+快递查询前端页面制作步骤(HTML,css)
  • AI硬件与芯片之争:从夸克眼镜到GPU通用性
  • 代码背后的哲学
  • 编程之外的修行
  • カワキヲアメク
  • 完整教程:第162期 自定义目标检测的 YOLO 微调完整指南
  • 完整教程:LeetCode 413 - 等差数列划分
  • 征程 6 | QAT 新版 qconfig 量化模板使用教程
  • 计算机毕设java幼儿园校车管理高效的系统 基于Java的幼儿园校车信息管理系统设计与实现 Java环境下幼儿园校车运营管理平台开发
  • 在线调试+JMeter联动(以聚合数据快递接口为例)
  • 手艺文档搭建实战:基于PandaWiki的五步自动化方案
  • ML - F1 score