二分
二分
思路
- 左边边界点
mid=(l+r+1)/2,- check左边性质,
check(mid)为true, 答案在[mid,r], l=mid - 为false, 答案在[l, mid-1], r= mid-1
- 右边边界点
mid=(l+r)/2- check右边性质, true, 答案在
[l,mid], r=mid - false, 答案在
[mid+1, r],l=mid+1
l=mid要加1,r=mid不用
代码
1 | bool check(int x) {/* ... */} // 检查x是否满足某种性质 |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
