二分查找模板及例题

文章目录

  • 模板一:
    • 使用场景:
    • 解释:
    • 例题:
      • 数的范围
        • 题意:
      • 代码:
  • 模板二:
    • 使用场景:
    • 解释:
    • 例题:
      • [Building an Aquarium](https://codeforces.com/problemset/problem/1873/E)
        • 题意:
        • 代码:

模板一:

while(l < r){
	int mid = l + r >> 1;
	while(check(mid)) r = mid;
	else l = mid +1;
}

使用场景:

此模板用于找出满足条件的最小值,即尽量往左找。

解释:

当mid满足条件时,执行 r = m i d r=mid r=mid,将区间往左缩小,直到l==r时候找到答案 。

例题:

数的范围

题意:

给定一个按照升序排列的长度为 n n n的整数数组,以及 q q q个查询。对于每个查询,返回一个元素 k k k的起始位置和终止位置(位置从 0开始计数)。如果数组中不存在该元素,则返回 − 1 − 1 -1 -1 11

代码:

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N=100010;

int n,m;
int a[N];

int main()
{
	cin>>n>>m;
	
	for(int i=0;i<n;i++) cin>>a[i];
	
	while(m--)
	{
		int x;
		
		cin>>x;
		
		int l=0,r=n-1;
		while(l<r)
		{
			int mid=(l+r)>>1;
			if(a[mid]>=x) r=mid;
			else l=mid+1;
		}
		if(a[l]!=x)
		{
			cout<<"-1 -1"<<endl;
		}
		else
		{
			cout<<l<<" ";
			l=0,r=n-1;
			while(l<r)
			{
				int mid=(l+r+1)>>1;
				if(a[mid]<=x) l=mid;
				else r=mid-1;
			}
			cout<<l<<endl;
		}
	}
	return 0;
}

模板二:

while(l < r){
	int mid = (l + r + 1) >> 1;//提醒:mid的更新方式不太一样
	while(check(mid)) l = mid;
	else r = mid - 1;
}

使用场景:

用于找出满足条件的最大值,即尽量往右找。

解释:

m i d mid mid满足条件时,执行操作 l = m i d l = mid l=mid,此时区间会向右边缩小。

例题:

Building an Aquarium

题意:

你喜欢养鱼,所以你决定建造一个水族馆。你有一块由 n n n 根柱子组成的珊瑚,其中 i i i 根柱子高 a i a _{i} ai 个单位。之后,你将在珊瑚周围建造一个水族箱,具体如下:

  • 选取一个整数 h h h --水箱的高度。在水箱两侧建造高度为 h h h的墙壁。
  • 然后,在水箱中注满水,使每一列的高度都是 h h h ,除非珊瑚的高度超过 h h h ,否则这一列不需要注水。

例如, a = [ 3 , 1 , 2 , 4 , 6 , 2 , 5 ] a=[3,1,2,4,6,2,5] a=[3,1,2,4,6,2,5] 和高度为 h = 4 h=4 h=4 ,最终总共需要使用 w = 8 w=8 w=8 个单位的水,如图所示。

你最多可以用 x x x 个单位的水来装满水箱,但你想尽可能建造最大的水箱。你能选择的 h h h 的最大值是多少?

代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#define int long long

using namespace std;

void solve(){
	int n,x;
	
	cin>>n>>x;
	vector<int> a(n);
	
	for(int i=0;i<n;i++) cin>>a[i];
	
	int l=0;
	int r=2000000007;
	while(l<r){
		int ans=0;
		int mid=(r+l+1)/2;
		for(int i=0;i<n;i++) ans+=max((long long)0,mid-a[i]);
		if(ans<=x) l=mid;
		else r=mid-1;
	}
	
	cout<<l<<endl;
}
signed main(){
	int t;
	
	cin>>t;
	
	while(t--) solve();
	
	return 0;
}

由于本人写二分时,范围总是出错,总是把两个mid的更新方式搞混,特写此文章加深记忆。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

龙蜥Anolis OS基于开源项目制作openssh 9.8p1 rpm包 —— 筑梦之路

环境信息 制作过程和centos 7几乎没有区别&#xff0c;此处就不再赘述。 CentOS 7基于开源项目制作openssh9.8p1 rpm二进制包修复安全漏洞CVE-2024-6387 —— 筑梦之路_cve-2024-6387修复-CSDN博客 制作成果展示 tree RPMS/ RPMS/ └── x86_64├── openssh-9.8p1-1.an7.…

Python32 极限学习机ELM

极限学习机&#xff08;ELM&#xff09;是一种简单的单层前馈神经网络&#xff08;SLFN&#xff09;学习算法。理论上&#xff0c;极限学习机算法&#xff08;ELM&#xff09;往往以极快的学习速度提供良好的性能&#xff08;属于机器学习算法&#xff09;&#xff0c;由Huang等…

Three.js相机简明教程

相机校准是 3D 计算机图形学中的一个基本概念&#xff0c;涉及设置虚拟相机以模拟真实世界相机的视角和行为。在 Three.js&#xff08;一种流行的 3D 渲染 JavaScript 库&#xff09;中&#xff0c;了解相机校准对于创建逼真且身临其境的 3D 场景至关重要。在本文中&#xff0c…

CinemachineBrain的属性简介

CinemachineBrain的属性简介 CinemachineBrain是Unity Cinemachine的核心组件&#xff0c;它和Camera组件挂载在一起&#xff0c;监控场景中所有的virtual camera。CinemachineBrain在inspector中暴露的属性如下&#xff1a; Live Camera和Live Blend分别表示当前active的virtu…

人工智能算法工程师(中级)课程6-sklearn机器学习之聚类问题与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程6-sklearn机器学习之聚类问题与代码详解。在机器学习领域&#xff0c;聚类是一种无监督学习方法&#xff0c;旨在将相似的数据点划分为同一类别。sklearn是一个广泛应用于机器学习的Py…

第十八章 Express multer 文件上传

本章将学习Express multer 文件上传 &#xff0c;因为Nest 的文件上传是基于 Express 的中间件 multer 实现的&#xff0c;所以在学习 Nest 文件上传之前&#xff0c;我们先学习下 multer 包 首先先创建 multer-test 文件夹执行下面代码 创建package.json npm init -y接着安装…

@RequiredArgsConstructor实现构造器注入

RequiredArgsConstructor实现构造器注入 1. Autowired 和 Resource 注解 Autowired Autowired 是 Spring 框架提供的注解&#xff0c;用于自动装配依赖。可以用于字段、构造函数和 setter 方法。 Autowired private ISysUserService userService;Resource Resource 是 Jav…

Java 中的 switch 语句:类型支持与限制

Java 中的 switch 语句&#xff1a;类型支持与限制 1、switch 语句支持的数据类型2、switch 语句不支持的数据类型3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#xff0c;switch 语句是一种用于多分支选择的控制结构…

物联网专业现代学徒制人才培养质量评价体系构建

一、 引 言 随着信息技术的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;技术已成为推动全球信息化、智能化发展的关键力量。物联网专业人才的培养质量直接关系到行业的创新能力和竞争力。现代学徒制作为一种创新的人才培养模式&#xff0c;已被广泛应用于职业教育中…

HCIP.ppp协议(点到点)认证阶段

ppp协议 ppp是点到点的协议 1.兼容性很好 2.可以进行认证和授权 3.可移植性强 三个阶段 1.链路协商阶段 LCP协商------去协商ppp链路会话 2.认证&#xff08;可选&#xff09; 3.NCP协商------网络层协商阶段&#xff08;根据网络层的不同NCP协议就会存在一个对应的NC…

查看尝试登服务器ssh 访问ip地址

不指定时间查看尝试登录服务器的SSH访问IP地址 # CentOS/RHEL系统 zgrep "sshd" /var/log/secure-* | grep "Failed password" | awk {print $(NF-3)} | sort | uniq -c | sort -nr | head -n 10检查过去7天的日志尝试登录服务器的SSH访问IP地址 # CentOS…

QT--SQLite

配置类相关的表&#xff0c;所以我使用sqlite,且QT自带该组件&#xff1b; 1.安装 sqlite-tools-win-x64-3460000、SQLiteExpert5.4.31.575 使用SQLiteExpert建好数据库.db文件&#xff0c;和对应的表后把db文件放在指定目录 ./db/program.db&#xff1b; 2.选择sql组件 3.新…

GaussDB关键技术原理:高性能(五)

GaussDB关键技术原理&#xff1a;高性能&#xff08;四&#xff09;从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存储和向量化引擎、SMP并行执行等五方面对高性能关键技术进行解读&#xff0c;本篇将从LLVM动态查询编译执行、SQL-BYPASS执行优化、线程池化、…

【文档+源码+调试讲解】冷冻仓储管理系统

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个B/S结构的冷冻仓储管理系统&#xff0c;会使冷冻仓储管理系统工作系统化、规范化&#xff0c;也会提高冷冻仓储管理系统平台形象&#x…

若依搭建 帝可得 售货机 笔记

一、搭建项目 1.后端gitee链接&#xff1a; 启动项目时记得修改mysql和redis的相关信息&#xff1b;创建项目相关数据库&#xff0c;并导入初始化的SQL脚本 dkd-parent: 帝可得后台管理系统 (gitee.com) 2.前端gitee链接&#xff1a; 启动项目时记得安装依赖&#xff1a;np…

IPv4与IPv6的定义和主要区别

IPv4与IPv6的定义 IPv4&#xff0c;即互联网协议版本4&#xff08;InternetProtocolversion4&#xff09;&#xff0c;是互联网使用最为广泛的协议之一。它采用32位地址&#xff0c;以点分十进制表示&#xff0c;如192.168.1.1。 IPv6&#xff0c;即互联网协议版本6&#xff…

自动驾驶革命:商汤科技突破性大模型UniAD震撼登场

自动驾驶革命&#xff1a;商汤科技突破性大模型UniAD震撼登场&#xff01; 在人工智能的浪潮中&#xff0c;自动驾驶技术一直是科技巨头们竞相追逐的圣杯。而今&#xff0c;商汤科技联合上海人工智能实验室与武汉大学&#xff0c;以一篇名为"Planning-oriented Autonomou…

Shader每日一练(2)护盾

Shader "Custom/Shield" {Properties{_Size("Size", Range(0 , 10)) 1 // 控制噪声纹理缩放大小的参数_colorPow("colorPow", Float) 1 // 控制颜色强度的指数_colorMul("colorMul", Float) 1 // 控制颜色乘法因子_mainColor("…

政安晨:【Keras机器学习示例演绎】(五十四)—— 使用神经决策森林进行分类

目录 导言 数据集 设置 准备数据 定义数据集元数据 为训练和验证创建 tf_data.Dataset 对象 创建模型输入 输入特征编码 深度神经决策树 深度神经决策森林 实验 1&#xff1a;训练决策树模型 实验 2&#xff1a;训练森林模型 政安晨的个人主页&#xff1a;政安晨 欢…

【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 独立成分分析&#xff08;ICA&#xff09;&#xff1a;解锁信号的隐秘面纱引言I…