二分模板


from:acwing

//浮点数二分
double search_0(int l, int r){
    while(r - l > INT_MIN){//INT_MIN根据小数点位数定,eg.小数点3位,INT_MIN = 1e-4
        double mid = (l + r) / 2;
        if(mid * mid * mid >= n)r = mid;
        else l = mid;
    }
    return l;
}

//整数二分
int search_1(int l, int r){
    while(l < r){
        int mid = l + r >> 1;
        if(array[mid] >= Find_Num)r = mid;  
        else l = mid + 1;
    }
    return r;//return l;此时l == r,为最左边的Find_Num下标
}

int search_2(int l, int r){
    while(l < r){
        int mid = l + r + 1 >> 1;
        if(array[mid] <= Find_Num)l = mid;
        else r = mid - 1;
    }
    return l;//return r;此时l == r,为最右边的Find_Num下标
}