三種常見的二分答案模板

最大值最小化

while(l<r)
{
    int mid=(l+r)>>1;
    if(check(mid))
    {
        r=mid;
    }
    else
    {
        l=mid+1;
    }
}

最小值最大化

while(l<r)
{
    int mid=(l+r+1)>>1;//注意這裏是l+r+1
    if(check(mid))
    {
        l=mid;
    }
    else
    {
        r=mid-1;
    }
}

小數二分模版

while(r-l>eps)//eps爲精度
{
    int mid=(l+r)>>1;
    if(check(mid))
    {
        r=mid;
    }
    else
    {
        l=mid;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章