zoukankan      html  css  js  c++  java
  • 乱七八糟觉得有用的东西

    lower_bound会找出序列中第一个大于等于x的数
    upper_bound会找出序列中第一个大于x的数
    这两个是STL中的函数,作用很相似:

    假设我们查找x,那么:

    lower_bound会找出序列中第一个大于等于x的数

    upper_bound会找出序列中第一个大于x的数

    没错这俩就差个等于号╮(╯▽╰)╭

    2.用法
    以下都以lower_bound做栗子 (因为upper_bound做出的栗子不好吃)

    (其实就是我懒得打两遍)

    它们俩使用的前提是一样的:序列是有序的

    对于一个数组a,在[1,n]的区间内查找大于等于x的数(假设那个数是y),函数就写成:

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

    函数返回一个指向y的指针

    看着是不是很熟悉?回想sort使用的时候:

    sort(a, a + 1 + n, cmp);
    这里a+1,a+1+n的写法是不是很像?

    STL里面的函数写区间一般都这个尿性

    同样的,lower_bound和upper_bound也是可以加比较函数cmp的:

    lower_bound(a + 1, a + 1 + n, x, cmp);
    到这里不得不说说前面的"有序序列",这里的"有序"是对什么有序?

    你可能已经猜到了,它是对于比较器有序,并且必须是升序!

    (为什么不是降序?这个你可能要去问问写STL的人)

    一旦对降序序列使用lower_bound,就会出现神奇的错误,具体原因可以看这篇:

    https://blog.csdn.net/qq1337715208/article/details/81072709

    当然比较器默认也是"<"

    如果要在一个下降序列里寻找一个小于x的数呢?

    根据我们之前说的,lower_bound只能对上升序列使用,那我假装下降序列是个上升序列就行了嘛~

    (lower_bound:你当我傻吗)(w1049:没错我就当你傻)

    只需要把比较器改成">":

    lower_bound(a + 1, a + 1 + n, x, cmp);
    同时需要写一个函数cmp:

    bool cmp(const int& a,const int& b){return a > b;}
    当然,你也可以这样:

    lower_bound(a + 1, a + 1 + n, x, greater () );
    这里的greater()就是c++友情提供的方便的大于函数,这样就不用自己动手写一个cmp函数了(其实就是懒)

    它们的实现方式是二分查找 ,存在的意义就是让我们写代码更方便地偷懒(一行lower_bound比写二分查找方便多了)

    3.返回值
    众所周知,小葱非常擅长计算组合数返回的是个指针

    对于返回值我们有两种处理方式:

    第一种:
    许多人讨厌指针,那么我们用这个指针减去数组开头的指针(即数组名),得到两个指针的差,就是数组下标,即:

    int p = lower_bound(懒得写) - a;
    那么a[p]就是要找的y

    (如果不知道为什么就记着好了)

    第二种:
    指针好!指针秒!

    改革春风吹满地,用指针的oier真争气!

    (以上两行你可以当做什么都没看见)

    int p = lower_bound(还是懒得写);
    那么
    p就是要找的y

    可以看出指针多么直接,不像数组下标还要倒腾一遍

    总结一下:####
    好像没什么可总结的QwQ

    对一个下降序列a

    int p = lower_bound(a + 1, a + 1 + n, x, greater () ) - a;
    a[p]即a[1]到a[n]中第一个小于等于x的数

    (被遗忘的upper_bound表示不服)
    2020.12.12
    数组的读入 : for(int i=1;i<=n;++i)scanf("%lld",sz+i);

  • 相关阅读:
    k8s
    vue-element-admin实现模板打印
    MAC系统命令
    思维导图工具
    前端如何渲染几万条数据不卡住页面?
    Echar使用案例
    .Net 相关报错解决方案
    Windows 操作技巧
    Docker&K8s
    微信网页授权原理分析
  • 原文地址:https://www.cnblogs.com/yangchengcheng/p/14125067.html
Copyright © 2011-2022 走看看