• 二分查找回顾


    近段时间过于依赖lower_bound 

    以至于在比赛时代码出现了很多问题 

    回顾一下二分查找

    相当于upper_bound 返回的是大于x的第一个值的位置

    int bis(int x)
    {
        int l=x,r=n,mid=(l+r)/2;
        while(l<=r)
        {
            mid=(l+r)/2;
            if(mid<=x) l=mid+1;
            else r=mid-1;
        }
        return l;
    }

    而lower_bound 如下 返回的是大于或等于该元素的第一个值

    int bis(int x)
    {
        int l=x,r=n,mid=(l+r)/2;
        while(l<=r)
        {
            mid=(l+r)/2;
            if(mid<x) l=mid+1;
            else r=mid-1;
        }
        return l;
    }

    两个代码只在判断中差了一个取等

    而在二分答案中经常需要返回的是满足条件的最大值 此时通常应该返回r 具体的返回值要结合实际进行分析

    附上lower_bound 源代码 

    https://blog.csdn.net/qq_30241305/article/details/51721696

  • 相关阅读:
    再逛开心网
    WAPM
    win2003安装flash cs4
    [AS3][物体的运动]
    转sql产生百万记录
    KeyedList
    timer 焦点
    sql优化
    灰色
    参数
  • 原文地址:https://www.cnblogs.com/caowenbo/p/11852314.html
Copyright © 2020-2023  润新知