zoukankan      html  css  js  c++  java
  • 手写vector 的lower_bound和upper_bound

    需要注意的是返还值是其在vector中的下标而不是第几个,如果vector中的元素均小于它则需特判这种情况返还+1;

    lower找第一个大于等于它的位置,而upper找第一个大于它的。

    用upper(r)-lower(l)可得区间个数,因为Upp把个数放大了一就相当与r-l+1里面的加1,而如果有等于的就少减一个算上这个等于的贡献反之选后边的所以特判if  >=  return mid+1;

    这两个特判用来考虑mid是否==end()的情况,如果不是直接return我们找到的值

    (个人理解,如果不对,请谅解)

    inline int lower_bound(int x,int y)
    {
        l=0,r=mark[x].size()-1;
        while(l<=r)
        {
            mid=(l+r)>>1;
            if(mark[x][mid]==y) return mid;
            else if(mark[x][mid]>y)  r=mid-1;
            else l=mid+1;
        }
        if(y>mark[x][mid])  return mid+1;
        return mid;
    }
    inline int upper_bound(int x,int y)
    {
        l=0,r=mark[x].size()-1;
        while(l<=r)
        {
            mid=(l+r)>>1;
            if(mark[x][mid]>y)  r=mid-1;
            else l=mid+1;
        }
        if(y>=mark[x][mid])  return mid+1;
        return mid;
    }

  • 相关阅读:
    Oracle DB 使用单行函数定制输出
    NDK编译多个cpp
    使用NDK编译的时候出现 undefined reference to
    linux SSSocket 简单封装
    OCP-1Z0-051-V9.02-70题
    OCP-1Z0-051-V9.02-69题
    OCP-1Z0-051-V9.02-68题
    OCP-1Z0-051-V9.02-67题
    OCP-1Z0-051-V9.02-66题
    OCP-1Z0-051-V9.02-65题
  • 原文地址:https://www.cnblogs.com/three-D/p/11295068.html
Copyright © 2011-2022 走看看