首页 > 编程语言 >(C++)二分

(C++)二分

时间:2024-03-14 22:24:40浏览次数:25  
标签:二分 可以 mid C++ 这题 区间

二分

​ 二分,他可以应用的范围特别广,即使是你想不到的地方他也可以二分。

​ 例如:Acwing790数的三次方根这题可以直接二分题目所要求的答案,通过不断逼近三次方后的结果来二分; Acwing5407.管道,这题里可以直接二分时间,然后合并区间查看是否满足; Acwing730.机器人跳跃问题可以直接对其能量进行二分,然后检查是否会亏损能量。

​ 所以二分到底什么时候能用?核心在于答案是否有单调性,也就是说,答案会因为数据的增长而单向前进(上升或下降),由此我们才能进行二分。

​ 二分的模板非常非常的简单,取中值,判断中值情况再调整左右区间。

while(条件)
{
    int mid = (l+r)/2;
    if(条件)
        l = mid;//左区间不满足条件,将左边界移到中间
    else
        r = mid;//右区间不满足条件,将右边界移到中间
}

​ 二分的复杂度大约就是\(O(logn)\),所以数据集一大起来一眼不能暴力的时候,就可以先看看题目是否满足二分了。

​ 一定要注意的是,二分不一定能用在有多个最优解的情况里,二分很有可能只寻找到其中一个最优解,但是如果设置不同的条件二分也确实可以找到更多的解。例如蓝桥杯的冶炼金属一眼就可以认出来,第一次二分找到最小解,第二次二分找到最大解即可。

标签:二分,可以,mid,C++,这题,区间
From: https://www.cnblogs.com/ComputerEngine/p/18074152

相关文章

  • C++ | 蓝桥题库区间或(位运算)
    一开始看题解很晕,这里采用前缀和方式的思想是:按位贡献,将答案分成32份(1e9最多32位二进制数)这样才有的prefix[32][N]前缀和数组,求的是第i位数第w位上的和。(1<<w)1左移w位相当于2的w次方,prefix[w][r]-prefix[w][l-1]相当于[l,r]这段距离上有1就让ans加上1,没有就不加。#inc......
  • 【二分法】分巧克力问题/python
    1.看出是用二分法:最大值最小化,最小值最大化,满足条件的最值,用二分法做。2.确定low,high,确定check的条件3.注意: 是当low<high的时候进行循环,当相等或大于的时候输出,while的条件不能写错。 本题是在区间里面找满足条件的最大值,所以,在算mid的时候面对取整的问题让它向大......
  • C++函数模板的实参推断
    C++模板在使用类模板创建对象时,程序员需要显式的指明实参(也就是具体的类型)。例如对于下面的Point类:template<typename T1, typename T2> class Point;我们可以在栈上创建对象,也可以在堆上创建对象:Point<int, int> p1(10, 20);  //在栈上创建对象Point<char*, c......
  • 归并排序、快速排序——左神数据结构与算法Day2学习笔记C++版本(持续更新)
    递归行为        利用递归求整个数组的最大值,代码如下。intfind_Max(inta[],intL,intR){if(L==R){returna[L];}intmid=L+((R-L)>>1);//mid是数组的中点intleftMax=find_Max(a,L,mid);intrightMax......
  • C++并发编程:线程池学习
    文章目录一、线程池的概念二、线程池的设计三、线程池的实现1、ThreadPool声明2、线程创建3、添加任务4、ThreadPool析构四、相关知识点1、emplace_back和push_back2、typenamestd::result_of<F(Args...)>::type3、std::packaged_task<return_type()>4、函数模板和......
  • C/C++ vscode 配置
    一、由于vscode本身不带有编译器,需要下载MinGW编译器 打开网站:MinGW-w64-for32and64bitWindows-Browse/mingw-w64/mingw-w64-releaseatSourceForge.net下载x86_64-win32-seh版本下载后,解压缩,把解压缩后的文件剪切奥C:\ProgramFiles把路径C:\ProgramFiles......
  • C++函数模板的重载
    C++模板当需要对不同的类型使用同一种算法(同一个函数体)时,为了避免定义多个功能重复的函数,可以使用模板。然而,并非所有的类型都使用同一种算法,有些特定的类型需要单独处理,为了满足这种需求,C++允许对函数模板进行重载,程序员可以像重载常规函数那样重载模板定义。我们定义了Swap(......
  • C++ error C2143: 语法错误: 缺少“;”(在“*”的前面)
    errorC2143编译错误但是,我在官网的例子上没有找到我所遇见的问题!在此记录一下,问题代码如下:1classtestA1;2classworkclass3{4public:5explicitworkclass();6virtual~workclass();7private:8intM_INT;9......
  • c++面试必问20题
    引用为什么不能修改引用关系?什么是重载this指针如何在类中出现的?类中的函数存放在代码区,所有对象访问的成员函数都是同一份代码,当不同对象调用同一个成员函数时,通过this区分在成员函数内修改的是哪个对象的成员变量this指针是否可以修改?不可以,如果修改了this就无法在函数......
  • C++动态数组
    #include<iostream>usingnamespacestd;intmain(){ intt,i=0,j=0; cin>>t; char*pc=nullptr;//初始化 int*pi=nullptr;//初始化 float*pf=nullptr;//初始化 intsum=0; intFLAG=0; while(FLAG<t) { charch; cin>>......