二分的写法很多,十分容易混淆,因此在此写下最常用的两种二分写法。



第一种写法:

int bsearch_1(int l, int r)

{

    while (l < r)

    {

        int mid = l + r >> 1;

        if (check(mid)) r = mid;

        else l = mid + 1;

    }

    return l;

}



第二种写法:

int bsearch_2(int l, int r)

{

    l--,r++;

    while (l+1 < r)

    {

        int mid = l + r  >> 1;

        if (check(mid)) l = mid;

        else r = mid ;

    }

    return l;

}