二分算法--模板及原理总结

二分答案

首先我们看这个图:

我们需要二分的答案就是这个临界点x。

什么情况下可以使用二分呢:
具有单调性(单调递增,单调递减),二段性(整个区间一分为二,一段区间满足,一段区间不满足),那个点x就是我们需要二分寻找的点。

二分的模板:
1. 图中第一种情况:
mid=(l+r)/ 2;,if ( check(mid ) )r=mid,l=mid+1;
2.图中第二种情况:
mid=(l+r+1) / 2, if ( check(mid ) )l=mid,r=mid-1;

//写check ,满足与不满足分别更新哪个区间;
// 二分一定可以二分出满足性质的数,但是结果需要判断是否符合性质;


例题:点击跳转例题

代码:
#include <bits/stdc++.h>
#define int long long //(有超时风险)
#define PII pair<int,int>
#define endl '\n'
#define LL __int128using namespace std;const int N=2e5+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f;int a[N],b[N],c[N],pre[N];signed main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n,q;cin>>n>>q;for(int  i=0;i<n;i++)cin>>a[i];while(q--){int x;cin>>x;//注意r不能开大了,不然会超出数组的值,这样check数组外的值为0就会出错int l=0,r=n-1;while(l<r){//二段性:这个点后面的部分都满足//用图一第一套模板int mid=(l+r)/2;if(a[mid]>=x)r=mid;else l=mid+1;}if(a[l]!=x)cout<<"-1 -1"<<endl;else{cout<<l<<' ';int l=1,r=n-1;while (l<r){//二段性:这个点前面的部分都满足//用图一第二套模板int mid=(l+r+1)/2;if(a[mid]<=x)l=mid;else r=mid-1;}cout<<l<<endl;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460502.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git flow与分支管理

git flow与分支管理 一、git flow是什么二、分支管理1、主分支Master2、开发分支Develop3、临时性分支功能分支预发布分支修补bug分支 三、分支管理最佳实践1、分支名义规划2、环境与分支3、分支图 四、git flow缺点 一、git flow是什么 Git 作为一个源码管理系统&#xff0c;…

Apktool任意文件写入漏洞分析 CVE-2024-21633

前置知识 在复现该漏洞前&#xff0c;有必要了解Apktool和resources.arsc相关的基础知识&#xff0c;方便理解后续POC的构造。 Apktool是一款流行的开源逆向工程软件&#xff0c;用于反编译和编译Android应用&#xff0c;因此&#xff0c;Apktool被许多其他逆向工程软件集成。…

时间序列之周期性

什么是序列相关&#xff1f; 针对时间序列的趋势和季节性&#xff0c;我们可以很容易地利用“时间相关”的属性进行建模&#xff0c;即直接从时间索引中得出特征。但是有些情况下&#xff0c;一些时间序列只能利用“序列相关”属性&#xff0c;即使用序列的历史值作为特征。如…

父母老了,耳朵听不清怎么办?

你有没有发现&#xff0c;随着年纪的增长&#xff0c;父母的耳朵好像越来越不好使了&#xff1a; 家里的电视声越放越大&#xff1b; 和他们说话常常讲到一半就被打岔&#xff1b; 一件事情要重复说好几遍才能听清&#xff1b; …… 也许父母没意识到问题的严重性&#xff0…

flutter开发实战-可扩展popup弹窗template模版样式

flutter开发实战-可扩展popup弹窗template模版样式 最近在看到一个flutter_beautiful_popup&#xff0c;可以美化弹窗窗口样式。该插件通过一个template模版的类BeautifulPopupTemplate作为抽象的base类。 一、基类BeautifulPopupTemplate 在BeautifulPopupTemplate中&…

C语言:分支与循环

创造不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; C语⾔是结构化的程序设计语⾔&#xff0c;这⾥的结构指的是顺序结构、选择结构、循环结构&#xff0c;C语⾔是能够实 现这三种结构的&#xff0c;其实我们如果仔细分析&#xff0c;我们⽇常所⻅的事情都可以拆分…

单片机——ISP下载、ICP下载、IAP下载

文章目录 ISPICPIAP ISP 在线系统编程&#xff0c;使用引导程序加上外围UART/SPI接口烧录 其本质是将程序的hex文件烧录到板子里的过程 可以使用flymcu这个软件 System memory是STM32在出厂时&#xff0c;由ST在这个区域内部预置了一段BootLoader&#xff0c; 也就是我们常说…

字节3面真题,LeetCode上hard难度,极具启发性题解

文章目录 &#x1f680;前言&#x1f680;LeetCode&#xff1a;41. 缺失的第一个正整数&#x1f680;思路&#x1f680;整个代码思路串一下&#x1f680;Code &#x1f680;前言 铁子们好啊&#xff01;阿辉来讲道题&#xff0c;这道题据说是23年字节3面真题&#xff0c;LeetC…

RabbitMQ高可用架构涉及常用功能整理

RabbitMQ高可用架构涉及常用功能整理 1. rabbitmq的集群模式2. 镜像模式高可用系统架构和相关组件3. rabbitmq的核心参数3.1 镜像策略3.2 新镜像同步策略3.3 从节点晋升策略3.4 主队列选择策略 4. rabbitmq常用命令4.1 常用基础命令4.1.1 服务管理4.1.2 用户管理4.1.3 角色管理…

微软.NET6开发的C#特性——运算符、表达式和命名空间

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;看到不少初学者在学习编程语言的过程中如此的痛苦&#xff0c;我决定做点什么&#xff0c;下面我就重点讲讲微软.NET6开发人员需要知道的C#特性&#xff0c;然后比较其他各种语言进行认识。 C#经历了多年发展…

uniapp踩坑之项目:简易版不同角色显示不一样的tabbar和页面

1. pages下创建三个不同用户身份的“我的”页面。 显示第几个tabbar&#xff0c;0是管理员 1是财务 2是司机 2. 在uni_modules文件夹创建底部导航cc-myTabbar文件夹&#xff0c;在cc-myTabbar文件夹创建components文件夹&#xff0c;在components文件夹创建cc-myTabbar.vue组件…

NAT——网络地址转换、NAPT

网络地址转换 NAT (Network Address Translation) 1994 年提出。 需要在专用网连接到互联网的路由器上安装 NAT 软件。 装有 NAT 软件的路由器叫做 NAT路由器&#xff0c;它至少有一个有效的外部全球 IP 地址。 所有使用本地地址的主机在和外界通信时&#xff0c;都要在 NA…