STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法

以前比较排斥这两个函数,遇到二分都是手写 \(while(left<=right)\)。

这次决定洗心革面记录一下这两个函数的在算法竞赛中的用法,毕竟一般不会导致TLE

其实百度百科已经概述得比较清楚了,

我们假设 \(value\) 为一个给定的数值,
\(lower\_bound\) 是在一个升序序列中从前后后找第一个大于等于 \(value\) 的值,
\(upper\_bound\) 是在一个升序序列中从前后后找第一个大于 \(value\) 的值。

比如:\(lower\_bound(a+1,a+n+1,k)\) 就是在\(a\)数组的\([1,n]\)范围(必须升序)里从前到后找第一个大于等于\(k\)的值,并以指针的形式返回。

注意,这两个函数的返回值都是一个指针,指向原序列中可以插入value,而不会破坏容器顺序的第一个位置。
我们可以在指针函数前面加个取值符 * ,来获得想得到的值。

看到这里,你应该知道lower和upper这两个单词的含义的吧,即将value插入某位置后该序列仍然分别是单调不严格递增单调严格递增的。

举个栗子

int a[]

原文地址:https://www.cnblogs.com/zhwer/p/12232910.html

时间: 2024-10-06 11:54:06

STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法的相关文章

二分检索函数lower_bound()和upper_bound()

二分检索函数lower_bound()和upper_bound() 一.说明 头文件:<algorithm> 二分检索函数lower_bound()和upper_bound() lower_bound():找到大于等于某值的第一次出现upper_bound():找到大于某值的第一次出现必须从小到大排序后才能用 内部查找方式为二分查找,二分查找必定需要排序 返回值为地址 二.代码及结果 1 /* 2 二分检索函数lower_bound()和upper_bound() 3 lower_bound(

算法竞赛中数论理论浅析

一.基本概念 带余除法(division algorithm,除法定理):a∈Z,d∈Z*,有唯一的整数 q 和 r,并且0≤r<d0,满足 a= d q+r.q 称为商,r  称为余数.通俗说法:整数除以正整数得到唯一的商(quotient)和余数(residue).  整除(divide exactly):称 a 整除 b ,当整数 a 除以非零整数 b ,商为整数,且余数为零, 我们就说a能被b整除(或说b能整除a),记作 b|a.b 称为 a 的约数(因数,common divisor)

算法竞赛中桶的概念与应用

算法竞赛中桶的概念与应用 在算法竞赛和计算机科学中,有一种特殊的数据结构,我们把它叫做--桶. 有许多和桶有关的算法和数据结构,想要学习它们,必须先明确好桶的概念与应用. 桶的概念 刚刚已经讲过,桶是一种数据结构.数据结构的用途是以一种特殊方式统计数据,使得我们能够快速地修改.查询我们想要的那部分数据.但是一般我们在想要统计一组数据的时候,我们更关注的是这些数据都是什么.就比如我们现在要统计一个数列,我们更关心的是这个数列里到底有那些数,而不是特别关心这些数都出现了几次. 桶就打破了这个现状,作

算法竞赛中常见的数学(一):Fibonacci数列

最近做的题目有很多都是与Fabonacci数列有关的,身为信息组蒟蒻的我最近经常与数学组李中一大神(Orz)畅谈,其中包括Fabonacci数列的若干性质,此处做一个总结. 参考资料: <组合数学(第5版)>.<具体数学(第2版)> 正文: Fibonacci数列是形如0.1.1.2.3.5.8.13.21.34……的数列.递归形式定义为: 数列F[n]=F[n-1]+F[n-2],其中F[0]=0,F[1]=1. 当然也有这样的类Fibonacci数列,即形如: G[n]=G[n

【技巧】算法竞赛中对拍程序的写法

在竞赛过程中一个对拍程序可以帮你排除许多错误, 如果担心自己写的正解被一些小数据卡掉, 我们通常会写个对拍程序来检查正解的正确性, 通过大量数据观察正解与暴力的输出是否相同. 我们首先拿出我们写的可能会超时但是可以保证绝对正确的暴力程序,称作bf.exe, 然后拿出我们写的待检测的正解,称作std.exe, 接着我们写一个随机数据生成程序,用来一次生成一组自制随机数据用来检测输出,称作gen.exe, 然后我们来写一个利用windows批处理的对拍程序. 在你的程序的根目录下新建一个称作chec

算法竞赛中的数论经典定理

素数定理:记为小于等于的素数个数,那么有 定理:设,,那么有 定理:设,,那么 定理:设,那么的值为 (1)为素数,那么答案就是 (2)有多个素因子,那么答案就是 (3)只有一个素因子,那么答案就是该素因子 定理:设为Fib数,那么有 定理:给定两个互素的正整数和,那么它们最大不能组合的数为,不能组合的数的个数为 定理:     (满足积性函数) 定理: 定理:任何个连续的正整数的乘积均可被整除 关于上述定理的两个结论 (1)如果是素数,那么均能被整除     证明:如果,那么有,由于与素数,那

算法竞赛专题解析(1):二分法、三分法

目录 1. 二分法的理论背景 2. 整数二分模板 2.1 基本形式 2.2 STL的lower_bound()和upper_bound() 2.3 简单例题 3. 整数二分典型题目 3.1 最大值最小化(最大值尽量小 3.1.1序列划分问题 3.1.2 通往奥格瑞玛的道路 3.2 最小值最大化(最小值尽量大) 4. 实数二分 4.1 基本形式 4.2 实数二分例题 5. 二分法习题 6. 三分法求极值 6.1 原理 6.2 实数三分 6.2.1 实数三分习题 6.3 整数三分 本系列是这本算法教

《算法竞赛入门经典(第二版)》pdf

下载地址:网盘下载 内容简介  · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧.全书内容分为12 章,包括程序设计入门.循环结构程序设计.数组和字符串.函数和递归.C++与STL入门.数据结构基础.暴力求解法.高效算法设计.动态规划初步.数学概念与方法.图论模型与算法.高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题.书中的代码规范.简洁.易懂,不

STL——函数

转自百度百科 主要记录写题时遇到的 STL 的一些函数, 一,离散化 string s[10005]; vector<string>v; int main(void) { while (scanf("%d", &n) != EOF) { v.clear(); for (int i = 0; i < n; i++) { cin >> s[i]; v.push_back(s[i]); } sort(v.begin(), v.end()); int lo