首页 > 编程语言 >C++数组中lower_bound和upper_bound函数的用法

C++数组中lower_bound和upper_bound函数的用法

时间:2024-07-19 16:11:34浏览次数:13  
标签:upper lower 下标 .. bound ge

lower_bound 函数

首先,对于一个升序的数组(下标从 0 或者 1 开始是无所谓的,这里假设下标从 1 到 n),即:

a[1] <= a[2] <= a[3] <= ... <= a[n]

这个数列是(非严格)单调递增的。

lower_bound(a+1, a+n+1, x)

会返回 a[1..n] 中所有 \(\ge x\) 的元素里面最小的那个数的地址。

也就是说,如果 \(a[p-1] \lt x \le a[p] \le a[p+1] \le ...\) ,则 lower_bound 函数会返回 \(a[p]\) 的地址。

因为 \(a[p]\) 的地址可以表示为 \(a+p\),而 \(a\) (\(a = a + 0\))表示的是 \(a[0]\) 的地址,所以

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

就能够获得 \(a[p]\) 的下标 \(p\) 了。\(p\) 对应的是所有 \(\ge x\) 的元素的下标的最小值。

也就是说:此时下标 \(p\) 对应的 \(a[p]\) 是最靠前的 \(\ge x\) 的那个数。

特殊地,如果 a[1..n] 范围内的所有数都 \(\lt x\),则 \(p\) 对应 \(n+1\)(查找的范围是 \(a[1..n]\) 后一个位置的数)。

upper_bound函数

  • lower_bound:\(\ge x\)
  • upper_bound:\(\gt x\)

即:

int p = upper_bound(a+1, a+n+1, x) - a;

则 p 对应的是 a[1..n] 中所有 \(\gt x\) 的元素的下标的最小值。

标签:upper,lower,下标,..,bound,ge
From: https://www.cnblogs.com/quanjun/p/18311661

相关文章

  • StackOverflowError堆栈溢出错误
    代码packagecom.yixie.core.log;publicclassSafeLoggerFactory{publicstaticSafeLoggergetLogger(Stringname){returnnewSafeLogger(com.yixie.core.log.SafeLoggerFactory.getLogger(name));}}错误:Instantiationofbeanfailed;nested......
  • Land survey boundary report (template)
    Landsurveyboundaryreport(template) 土地勘测定界报告(模板).doc......
  • 已解决java.rmi.NotBoundException:RMI中没有绑定的对象的正确解决方法,亲测有效!!!
    已解决java.rmi.NotBoundException:RMI中没有绑定的对象的正确解决方法,亲测有效!!!目录问题分析出现问题的场景服务器端代码客户端代码报错原因解决思路解决方法1.绑定远程对象2.检查查找名称3.验证RMI注册表启动RMI注册表完整示例代码服务器端代码客户端代码......
  • yolov8训练过程中,出现IndexError:index 17 is out of bounds for dimension 1 with siz
     在用yolov8做数据训练自己的数据时发现,这样一个错误,困扰了我很久。报错的原因是数组的问题,我查了一下百度,说是定义数组的问题,之后我就慌的一批,这个源包这么多,该去哪排查。raceback(mostrecentcalllast):File"d:\jiaotong\ultralytics-8.1.0\mytrain.py",line10,......
  • ABC 330 F Minimize Bounding Square
    题意给定xoy平面上的N个点,可以进行K次操作,每一次操作可以让这N个点中的一个点横向或纵向移动一个单位。最后用一个所有边都平行于x轴或y轴的正方形将这N个点包围,请最小化这个正方形的边长。思路最小化最大横向或纵向长度,显然二分答案。二分最后正方形的长度,现在问题转化为如何c......
  • springboot Invalid bound statement (not found): com.elitel.xxx.dao.xxx 错误处
    如果这篇文章能给你带来帮助,不胜荣幸,如果有错误也请批评指正,一起学习,共同进步!今天给同事看了个问题,发现了这个问题,之前也遇见过,可是没有遇见这种情况,这次我记录一下。首先来说,造成这个错误的原因是什么。它是在SpringBoot应用程序中遇到“Invalidboundstatement(not......
  • 使用Mybatis出现org.apache.ibatis.binding.BindingException: Invalid bound stateme
    一般的解决方式:1、检查xml文件名和mapper接口名字是否一致2、检查xml文件中的namespace和mapper接口的全类名是否一致3、检查xml文件中的方法名和mapper接口中的方法名是否一致4、检查target中是否存在xml文件,如果不存在有两种方式,第一种是在yml文件中配置,第二种是在pom.xm......
  • java ArrayIndexOutOfBoundsException数组越界异常
    Java中的ArrayIndexOutOfBoundsException(数组越界异常)是一种运行时异常,表示访问了数组的非法索引位置。在数组中,索引从0开始,并以数组长度减一为上限。如果使用了小于0或大于等于数组长度的索引,就会抛出ArrayIndexOutOfBoundsException异常。以下是一个示例代码,演示了这个异常......
  • 报错信息:Invalid bound statement (not found): org.example.mapper.UserMapper.selec
    分析出现错误的原因:使用package标签加载映射sql文件,要求需要Mapper接口名称需要和映射文件相同,并且在同一个目录中。由图可见,三个位置目录及名称都一致,但是运行还是报错。经过一番折磨,最后在windows系统文件中发现我在idea里建的多层文件夹其实是一个文件夹在idea创建Direct......
  • height_scale = scales[2] IndexError: index 2 is out of bounds for axis 0 with si
    1.yolov5网络层优化在yolov5训练之前最好是改一下网络层,要不会报这个错。Traceback(mostrecentcalllast): File"convertCaffe.py",line159,in<module>   convertToCaffe(graph,prototxt_path,caffemodel_path,exis_focus=True,focus_concat_name="Concat_40",......