二分查找算法模板(非常好用)

版本1

这种适用于答案落在左半区间,一般适用于求解最小化最大值

当区间[l, r]的更新操作是r = mid; l = mid + 1;时,计算mid时不需要加1。
C++ 代码模板:

int bsearch_1(int l, int r)
{
    while (l < r) //l=r结束
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    return l;
}

版本2

这种适用于答案落在右半区间,一般适用于求解最大化最小值

当区间[l, r]的更新操作是r = mid - 1; l = mid;时,计算mid时需要加1。
C++ 代码模板:

int bsearch_2(int l, int r)
{
    while (l < r)//l=r结束
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

 

 

posted @ 2019-02-12 11:02  TLE自动机  阅读(486)  评论(0编辑  收藏  举报