二分

今日有幸見到一種二分的寫法,甚是驚奇:

LL bs(LL n, LL k) {//找到滿足結果大於等於n的最小的值
    LL l = 1, r = k + 1;
    while(l + 1 < r) {
        LL m = (l+r) >> 1;
        if( (k+m) * (k+1-m) >= 2*n ) l = m;
        else r = m;
    }
    return k+1-l;
}


發佈了92 篇原創文章 · 獲贊 18 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章