首页 > 其他分享 >二分模板

二分模板

时间:2022-10-28 22:34:52浏览次数:42  
标签:二分 return int mid 区间 模板

二分模板一共有两个,分别适用于不同情况。
算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。

版本1
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。

C++ 代码模板:

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;
}

版本2
当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

C++ 代码模板:

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

 

标签:二分,return,int,mid,区间,模板
From: https://www.cnblogs.com/xxiThubmsk/p/16837707.html

相关文章

  • 标准模板库 02 容器vector
    容器大致分为序列式容器(Sequence),关联式容器(Associative)和无序容器(Unordered),无序容器也可以归为关联式容器内。序列式容器(Sequence)array:数组,是一种固定大小的结构,静态空......
  • 标准模板库 01 概念
    STL是可复用的标准模板库,在泛性思维上架设的一个概念结构,使抽象概念为主体,并使其系统化。容器(containers):用于存放数据,包含各种如vector,list,deque,set,map等数据结构。分配......
  • P4213 【模板】杜教筛(Sum)
    题目链接P4213【模板】杜教筛(Sum)题目描述给定一个正整数,求\[ans_1=\sum_{i=1}^n\varphi(i)\]\[ans_2=\sum_{i=1}^n\mu(i)\]输入格式本题单测试点内有多组数据。......
  • 【CF802O】April Fools‘ Problem (hard)(wqs二分,模拟费用流,老鼠进洞)
    如果没有恰好为\(k\)的限制的话是个老鼠进洞的经典模型。加上恰好为\(k\)的限制后考虑使用wqs二分,因为费用流每次增广出来的费用是单调不降的。即如果设\(g(k)\)......
  • 【ARC083F】Collecting Balls(图论模型,二分图,基环树,拓扑序)
    首先用\(2n\)个点表示每个机器人,原图中的一个球转化为图上的一条边,于是转化为一个二分图模型。我们对这个二分图的每个连通块分开考虑(假设有\(cnt\)个连通块),显然一个......
  • 【ARC080F】Prime Flip(二分图匹配,差分)
    这种区间反转的题,套路就是差分。设\(a_i\)表示第\(i\)枚硬币是否正面朝上,显然只有\(a_{x_1},a_{x_2},\cdots,a_{x_n}\)等于\(1\),其他都是\(0\)。那么我们的目标是......
  • 考场Dev配置及代码模板
    编译选项:-std=c++14-O2-Wl,--stack=104857600-Wall-Wextra-Wshadow-Wl开大栈空间-Wall显示所有警告-Wextra比较始终为true或始终为false,则发出警告,但不警告常......
  • 【AGC005D】_K Perm Counting(容斥,二分图,计数dp)
    首先正面做不太好做,考虑容斥。设\(f(m)\)表示排列中至少有\(m\)处\(|P_i-i|=k\)的方案数。那么答案就是\(\sum\limits_{i=0}^n(-1)^if(i)\)。原题可以看成一个二......
  • 洛谷P3391 【模板】文艺平衡树
    题目描述您需要写一种数据结构(可参考题目标题),来维护一个有序数列。其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4] 的话,结果是5 2 ......
  • 递归代码模板--分治代码模板--动态规划的关键
    递归代码模板Pythondefrecursion(level,param1,param2,...):#recursionterminator//递归终结者iflevel>MAX_LEVEL:#process_resu......