zoukankan      html  css  js  c++  java
  • 【一个比较bug free的二分写法】

    lower_bound:

    [l, r)区间内大于等于val的第一个位置

    int lower_bound(int l, int r, int val){
        while(l < r){
            int mid = l + ((r - l) >> 1);
            if(a[mid] < val){
                l = mid + 1;
            }else{
                r = mid;
            }
        }
        return l;
    }

    upper_bound:

    [l, r)区间内大于val的第一个位置

    int upper_bound(int l, int r, int val){
        while(l < r){
            int mid = l + ((r - l) >> 1);
            if(a[mid] <= val){
                l = mid + 1;
            }else{
                r = mid;
            }
        }
        return l;
    }

    [l, r)区间内小于等于val的第一个位置:upper_bound(l, r, val) - 1

    [l, r)区间内小于val的第一个位置:lower_bound(l ,r, val) -1

  • 相关阅读:
    SQL Server Management Studio
    uiimage拉伸
    时间空间复杂度
    冒泡选择排序

    插入排序
    快速构建APP
    TTTAtibutedlabel
    Git命令
    适配
  • 原文地址:https://www.cnblogs.com/itcsl/p/9973284.html
Copyright © 2011-2022 走看看