AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 其它
    • 题解
    • 分享
    • 商店
    • 问答
  • 吐槽
  • 登录/注册

关于二分的一些理解

作者: 作者的头像   tornadoH2O ,  2023-01-24 00:02:18 ,  所有人可见 ,  阅读 44


1


做了一些二分的题目,对这类题目还是有些害怕,希望整理过后可以做的好一点吧

二分的实质是找到一个边界,左半边满足这个性质,但右半边不满足这个性质(并不一定要满足单调的条件)
这样就可以通过二分来寻找边界,包括左边界与右边界
这里的左边界指的是右区间的左边界,右边界则是左区间的右边界。

注意:当题目出现XX最短/最小的最大值或者XX最长/最大的最小值,就要想到二分

  1. 情况一(求左区间的右边界)
    当check函数成立的时候,此时mid处于红色区间(左区间),mid满足check,所以直接l = mid
    当check函数不成立的时候,mid处于绿色区间(右区间),此时mid不满足check函数,所以需要减1向左侧靠拢r = mid - 1
    注意:这种情况的mid需要加一,mid = l + r + 1 >> 1
    代码:
mid = l + r + 1 >> 1
while l < r:
    if check():
       l = mid
    else:
       r = mid - 1 

  1. 情况二(求右区间的左边界)
    当check函数成立的时候,此时mid处于绿色区间(右区间),mid满足check,所以直接r = mid
    当check函数不成立的时候,mid处于红色区间(左区间),此时mid不满足check函数,所以需要加1向右侧靠拢l = mid + 1
    代码:
mid = l + r >> 1
while l < r:
    if check():
       r = mid
    else:
       l = mid + 1

做过的题目列表:
1. 洛谷 P2249. 【深基13.例1】查找
2. 洛谷 P1102. A-B 数对
3. 洛谷 P2440. 木材加工
4. 洛谷 P2678. 跳石头
5. 洛谷 P1678. 烦恼的高考志愿
6.

最近感觉做题的关键怎么在check函数上,只要想到check函数怎么写,就能做出来

2 评论


用户头像
Capoo-Capoo   8天前         踩      回复

二分跟着y总板子理解,多做题感觉就容易了,我之前也恐惧二分QAQ

用户头像
tornadoH2O   7天前         踩      回复

加油qaq


你确定删除吗?
1024
x

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息