今日有幸見到一種二分的寫法,甚是驚奇:
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;
}
今日有幸見到一種二分的寫法,甚是驚奇:
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;
}