AcWing 5407. 管道(二分,区间合并)

有一根长度为 l e n len len 的横向的管道,该管道按照单位长度分为 l e n len len 段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。

一开始管道是空的,位于 L i L_i Li 的阀门会在 S i S_i Si 时刻打开,并不断让水流入管道。

对于位于 Li 的阀门,它流入的水在 T i ( T i ≥ S i ) T_i(T_i≥S_i) TiTiSi时刻会使得从第 L i − ( T i − S i ) L_i−(T_i−S_i) Li(TiSi) 段到第 L i + ( T i − S i ) L_i+(T_i−S_i) Li+(TiSi) 段的传感器检测到水流。
求管道中每一段中间的传感器都检测到有水流的最早时间。

输入格式
输入的第一行包含两个整数 n , l e n n,len n,len,用一个空格分隔,分别表示会打开的阀门数和管道长度。
接下来 n n n 行每行包含两个整数 L i , S i L_i,S_i Li,Si,用一个空格分隔,表示位于第 Li 段管道中央的阀门会在 S i S_i Si 时刻打开。

输出格式
输出一行包含一个整数表示答案。

数据范围
对于 30 30% 30 的评测用例, n ≤ 200 , S i , l e n ≤ 3000 n≤200,S_i,len≤3000 n200Si,len3000
对于 70 70% 70 的评测用例, n ≤ 5000 , S i , l e n ≤ 1 0 5 n≤5000,S_i,len≤10^5 n5000Si,len105
对于所有评测用例, 1 ≤ n ≤ 1 0 5 , 1 ≤ S i , l e n ≤ 1 0 9 , 1 ≤ L i ≤ l e n , L i − 1 < L i 1≤n≤10^5,1≤S_i,len≤10^9,1≤L_i≤len,L_i−1<L_i 1n1051Si,len1091LilenLi1<Li

输入样例:

3 10
1 1
6 5
10 2

输出样例:

5

直入正题,首先确定二分的范围。
最小的时刻就是0时刻,那么l就为0
最大的时刻就是在1e9时刻开阀门,并且只开一个,管道长度也为1e9,则会消耗2e9的时间,那么r就为2e9

并且肯定是时间越长越容易灌满水,则时间越靠右就越容易满足条件,假如在mid时刻。

  • 如果满足条件,那么就去搜更短时间,也就是从 l m i d l ~ mid l mid
  • 如果不满足条件,那么就去搜更长的时间,也就是从 m i d + 1 r mid+1 ~ r mid+1 r

在这里对于验证每个管道是否灌满的方法使用区间合并。
代码中也有详细注解。

代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define PII pair<int,int>
const int N = 1e5 + 10;int n, m;
int s[N], len[N];
vector<PII>q;	//存所有的区间bool check(int mid) {q.clear();	//每次都要初始化for (int i = 0; i < n; i++) {if (s[i] <= mid) {		//如果没有超过mid时刻(mid时刻之后发生的不算)int t = mid - s[i];	//根据公式算出区间//这里取max和min,避免超出给出的管道长度的范围int l = max(1, len[i] - t), r = min((long long)m, (long long)len[i] + t);q.push_back({ l,r });	//压入}}sort(q.begin(), q.end());		//排序int st = -1, ed = -1;			//st存最终起点,ed存最终终点for (auto t : q) {				//遍历qif (t.first <= ed + 1)ed = max(ed, t.second);	//如果当前区间的起点小于等于ed+1,那么就说明起点在st到ed之间,则合并两个区间else st = t.first, ed = t.second;	//如果当前区间的起点大于ed+1,即当前区间超出了st到ed之间,则更新区间//注意此处为何直接覆盖了st和ed://		在sort之后,所有的元素按照first排序,也就是说现在的元素都是按照起点从小到大排序的//		如果这里出现了一个区间的起点大于了ed+1,那么就说明之后的所有区间都不会和当前的区间//		有交集了,那么现在的st和ed围成的区间就一定不可能做到覆盖整段管道}return st == 1 && ed == m;		//如果能够覆盖整段管道,则返回true
}int main() {cin >> n >> m;for (int i = 0; i < n; i++)cin >> len[i] >> s[i];//二分求最小时刻int l = 0, r = 2e9;while (l < r) {int  mid = (long long)l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << r;return 0;
}

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

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

相关文章

下载、安装并配置 Node.js

文章目录 1. 下载2. 自定义安装3. 添加环境变量4. 验证5. 修改下载位置6. npm 换源7. 测试 ➡️➡️➡️来源&#xff1a;Simplilearn.com Node.js 是一个开源、跨平台的 JavaScript 运行时环境和库&#xff0c;用于在客户端浏览器之外运行 web 应用程序。 Ryan Dahl 在2009年开…

React useMemo钩子指南:优化计算性能

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

萝卜大杂烩 | Polars ,最强Pandas平替(内含实操代码,建议收藏!)

本文来源公众号“萝卜大杂烩”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Polars (最强Pandas平替) 本文章转自&#xff1a;数据studio 1 介绍 Polars是一个用于操作结构化数据的高性能DataFrame库&#xff0c;可以说是平替…

leetcode 热题 100_旋转图像

题解一&#xff1a; 翻转数组&#xff1a;先将数组沿右上-左下对角线翻转&#xff0c;再将数组上下翻转。 class Solution {public void rotate(int[][] matrix) {int n matrix.length;for (int i 0; i < n; i) {//沿右上-左下对角线翻转for (int j 0; j < n - i - 1…

简单句,并列句【语法笔记】

1. 简单句&#xff0c;并列句本质分别是什么 2. 如何区分简单句和并列句 3. 连接词 4. 简单句的五大基本句型 5. 有连接词&#xff0c;未必都是并列句&#xff0c;这是为什么

为何系统对接采用定制开发周期通常比集成平台更长

在信息化建设的浪潮中&#xff0c;系统对接是实现企业内外部系统间数据共享和业务协同的关键环节。在对接开发过程中&#xff0c;定制开发与平台开发是两种主要的实现方式&#xff0c;而普遍观点认为&#xff0c;定制开发对接的周期通常要比平台开发更长。本文将深入探讨这一现…

物奇平台超距断连无蓝牙广播问题解决方法

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 物奇平台超距断连无蓝牙广播问题解决方法 一 问题反馈 二解决方法: 1 运行流程分析 对应代…

智能合约开发基础知识:最小信任机制、智能合约、EVM

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 专栏的前面几篇详细了介绍了区块链的核心基础知识 有兴趣学习的小伙伴可以看看http://t.csdnimg.cn/fCD5E关于区块…

Effective C++ 学习笔记 条款24 若所有参数皆需类型转换,请为此采用non-member函数

作者在导读中提过&#xff0c;令class支持隐式类型转换通常是个糟糕的主意。当然这条规则有其例外&#xff0c;最常见的例外是在建立数值类型时。假设你设计一个class用来表现有理数&#xff0c;允许整数“隐式转换”为有理数似乎颇为合理。的确&#xff0c;它并不比C内置从int…

线上又出问题了!又是特殊场景,哎呀,当时怎么没有想到!

目录标题 导读01.为什么经常会发生测试场景覆盖不全的问题?02.如何提升测试覆盖度?03.综述 导读 在我们的测试工作中&#xff0c;是不是经常遇到这样的情形&#xff0c;发生了线上问题&#xff0c;产品、研发或者测试同学一拍脑袋&#xff1a;当时怎么没有想到&#xff0c;怎…

Vue.js+SpringBoot开发海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

【论文阅读】VMamba:视觉状态空间模型

文章目录 VMamba:视觉状态空间模型摘要相关工作状态空间模型 方法准备状态空间模型离散化选择扫描机制 2D 选择扫描VMamba 模型整体结构VSS块 实验分析实验有效感受野输入尺度 总结 VMamba:视觉状态空间模型 摘要 受最近提出的状态空间模型启发&#xff0c;我们提出了视觉状态…

一款适合程序员开发复杂系统的通用平台——JNPF 开发平台

在过去&#xff0c;很多开发工具更侧重代码编辑&#xff0c;针对数据库增删改查&#xff08;CRUD&#xff09;类的 Web 系统开发&#xff0c;在界面设计、前后端数据交互等环节主要还是靠写代码&#xff0c;效率比较低。目前很多所谓的低代码开发平台&#xff0c;大多数也都是基…

Linux第75步_pinctrl子系统驱动和gpio子系统的常用函数

1、STM32MP1的pinctrl子系统驱动 pinctrl子系统源码目录为drivers/pinctrl&#xff0c;一个PIN最好只能被一个外设使用。 “stm32mp151.dtsi”中有一个“pin-controller节点标签”叫pinctrl pinctrl: pin-controller50002000 { #address-cells <1>; /*定义子节点的…

【24春招/Java】Java的市场情况介绍及Spring Boot基础

Java的市场情况 需求减少 人员增加 面试难度增加 1、Java高级开发&#xff0c;100份简历&#xff0c;筛选了20份&#xff0c;邀约20个人面试 面试机会&#xff1a;录取人数20:1 充分准备通过面试的前提 不要裸面&#xff01;&#xff01;&#xff01; 背葵花宝典&#xff08;…

23.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-实现配置工具数据结构

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;22.加载配置文件…

站库分离技术--反向代理技术-雷池云WAF-给自己搭建一个安全点的网站

文章目录 概要整体架构流程技术名词解释技术细节ssh-ubuntu服务器docker-映射-链接-通信nginx反代mysql设置数据库新密码 小结我的mysql映射目录我的wordpress映射目录 成果展示 概要 新买了一个云服务器&#xff0c;想搭建一个站库分离的wordpress为主的网站&#xff0c;采用d…

PID控制器组(完整SCL代码)

PID控制器组不是什么新概念,是在PID控制器的基础上,利用面向对象的思想对对象进行封装 批量实例化。 1、增量式PID https://rxxw-control.blog.csdn.net/article/details/124363197https://rxxw-control.blog.csdn.net/article/details/1243631972、完全增量式PID https:/…

Vue 3:引领前端开发的未来

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

自制STLink-V2.1

STLink-V2.1需要使用的芯片是STM32F103CBT6 原理图如下&#xff1a; PCB如下&#xff1a; 将板子焊接好后下载&#xff1a;STM32 DebugMass storageVCP V2.J40.M27的固件后&#xff0c;再使用ST官方ST-LinkUpgrade工具对我们自制的STLink-V2.1进行升级。升级完成后&#xff0c…