首页 > 其他分享 >二分

二分

时间:2024-05-08 13:37:01浏览次数:14  
标签:二分 int double mid else check

二分

浮点数二分

  • 模板
bool check(double x) {/* ... */}  // 检查x是否满足某种特性

double bsearch_3(double l, double r)
{
    const double eps = 1e-6;
    while(r - l > eps)
    {
        double mid = (l + r) / 2;
        if(check(mid)) r = mid;
        else l = mid;
	} 
    return l;
}

整数二分

  • 模板
bool check(double x) {/* ... */}  // 检查x是否满足某种特性

// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{
    while(l < r)
    {
        int mid = l + r >> 1;
        if(check(mid)) r = mid;
        else l = mid + 1;
    }
    return l;
}

// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch(int l, int r)
{
    while(l < r)
    {
        int mid = l + r >> 1;
        if(check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}
  • 一个更好的模板

此模板不容易出错,二分查找为什么总是写错?_哔哩哔哩_bilibili

int l = -1, r = n;
while(l + 1 != r)
{
    int mid l + r >> 1;
    if(check()) l = mid;
    else r = mid;
    //最后根据你所分左右两边区间的结果
	//选取L或者R作为结果
}

image-20240427201442613

标签:二分,int,double,mid,else,check
From: https://www.cnblogs.com/hnu-hua/p/18179460

相关文章

  • 二分查找的个人朴素实用理解
    背景二分查找主要用于在有序数组中查找符合条件的特定值,更进一步可以拓展到查找大于特定值的最小数和小于特定值的最大数的边界值问题,在数据量很大的场景下合理利用有序或者说单调性这一特性大大提高查找效率,能在对数时间内解决问题。虽然理解起来很简单,但是二分法是很常用......
  • 二分法、冒泡排序
    【一】二分法二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法思路:首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤的操作。如......
  • 整体二分
    抽象。P3527[POI2011]MET-MeteorsByteotianInterstellarUnion有\(n​\)个成员国。现在它发现了一颗新的星球,这颗星球的轨道被分为\(m​\)份(第\(m​\)份和第\(1​\)份相邻),第\(i​\)份上有第\(a_i​\)个国家的太空站。这个星球经常会下陨石雨。BIU已经预测了接......
  • 《代码随想录》-2.二分查找
    前提:1.有序2.无重复//版本1intleft=0;intright=nums.size()-1;while(left<=right){intmiddle=left+(right-left)/2;//防止溢出if(nums[middle]>target){right=milddle-1;}elseif(nums[middle]<target{left=middle+1;}else{returnmiddle;......
  • 整体二分学习笔记
    最近准备学数据结构乱搞,接下来学k-dtree大致介绍可以使用整体二分解决的题目需要满足以下性质:1.询问的答案具有可二分性2.修改对判定答案的贡献互相独立,修改之间互不影响效果3.修改如果对判定答案有贡献,则贡献为一确定的与判定标准无关的值4.贡献满足交换律,结合律,具有可加......
  • 整体二分
    1概念在很多题目中,我们可以使用二分法来得出答案。但是如果说这一类题目有多次询问,并且多次询问分别二分会TLE时,我们就需要引入一个东西叫整体二分。整体二分的主要思路就是将多个查询一起解决,因此它是一种离线算法。整体二分的具体操作步骤如下:首先记\([l,r]\)为答案的......
  • 整体二分学习笔记
    1.简介在一些题目中,可能存在一些题目,对于每次询问直接二分可能会TLE,此时就要用到整体二分整体二分是一种离线的方法,适用于如下情况:询问答案具有可二分性修改对判定答案的贡献相互独立,修改之间互不影响效果修改如果对判定答案有贡献,则该贡献是一个确定的与判定标准无关......
  • 二分图染色
    二分图booldfs(intu,intc){ if(color[u]==c) returntrue; elseif(color[u]==3-c) returnfalse; color[u]=c; for(intv:graph[u]) if(!dfs(v,3-c))returnfalse; returntrue;}习题:P1330封锁阳光大学解题思路按照题目要求,每一条......
  • 整体二分
    整体二分动态排名每次二分复杂度\(O(n\logV)\),问题瓶颈在于有多次询问整体二分一种离线算法,将多个询问一起处理:条件问询可以二分修改之间互不影响修改对答案的贡献和判定次数,时间无关贡献满足结合律,交换律,可加性算法流程核心函数,处理一个区间的询问,他们的......
  • 二分的妙用
    数列分段SectionII链接:https://www.luogu.com.cn/problem/P1182题目描述对于给定的一个长度为\(N\)的正整数数列\(A_{1\simN}\),现要将其分成\(M\)(\(M\leqN\))段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列\(4\2\4\5\1\)要分成\(3\)段。将......