【小心地雷!】关于二分方法的不同与代码细节
【小心地雷!】关于二分方法的不同与代码细节
笔者写这道题,调了30min发现二分挂了qwq,故作此文。
众所周知,一般情况下,二分的方式有两种:
1.区间收缩方式是
inline int find(int x)
{
int l = 1,r = n;
while(l < r)
{
int mid = (l + r) >> 1;
if(cando(mid,x)) r = mid;
else l = mid + 1;
}
return l;
}
还有一种办法,就是每次二分时单独用一个“答案”变量,记录取到的最小\大值是多少,因为已经”记“住了答案,所以每次二分时相当于在"新"的
inline int find(int x,int y)
{
int l = x,r = y - 1,ret = 0;
while(l <= r)
{
int mid = (l + r) >> 1;
int lt = f(x,mid),rt = f(mid + 1,r);
ret = max(ret,min(lt,rt));
if(lt < rt) r = mid - 1;
else l = mid + 1;
}
return ret;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话