首页 > 其他 > 详细

二分溢出的问题(二分传统模板的改进)

时间:2021-08-14 15:25:05      阅读:21      评论:0      收藏:0      [点我收藏+]

我们在二分的时候通常是这样的

int bsearch(int l ,int r)
{
	while (l < r)
    {
        int mid = l + r >> 1;   // mid = l + r + 1 >> 1;
        if(check(mid)) r = mid; // l = mid;
        else l = mid + 1;		// r = mid - 1;
    }
    return l;
}

但是当lr很接近且r很大的时候就可能会导致数据的溢出从而产生错误的划分

改进版本:

int bsearch(int l ,int r)
{
	while (l < r)
    {
        int mid = l + (r - l) >> 1; 	// mid = l + (r - l + 1) >> 1;
        if(check(mid)) r = mid; 		// l = mid;
        else l = mid + 1;				// r = mid - 1;
    }
    return l;
}

本质上就是做等价变形,但是可以避免溢出

二分溢出的问题(二分传统模板的改进)

原文:https://www.cnblogs.com/initlist/p/15140492.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!