【Acwing906】区间分组贪心策略证明与题解

题目描述

 

贪心策略 

先按照左端点对所有区间进行排序,然后从左到右遍历每一个区间,如果遍历到的区间能够加入现在已经存在的某一个区间组中,则加入,否则,创建新的区间组,并将这个区间加入。

具体的方案是用小根堆存储每一个区间组的区间中最大的右端点值(想一想为什么用小根堆存储?)然后比较遍历到的区间左端点l和从小根堆堆顶中取到的这个右端点值r:

若l<=r则不能加入任何区间组

若l>r可以加入含有最大右端点值为r的区间组当中,更新这个最大右端点值(方法是:从大根堆中取出堆顶并把新的区间的右端点入堆)

贪心策略证明

这一题的证明与acwing905有异曲同工之妙,这里就不那么详细了,思想也可以参照那道题目的题解:

acwing905贪心策略清晰证明

同样的设:

ans为所有分组方案的最小分组数

cnt为根据上述贪心策略得到的最小分组数

现在的目标是证明:ans>=cnt&&ans<=cnt

对于ans<=cnt是根据假设得到的显而易见的结论

对于cnt>=ans,假设下图这种情况,将要产生第cnt个分组了,那么前cnt-1个区间组的最后一个区间一定和这个新区间有着公共点Li,与其它区间相交了cnt次,既然对于所有的区间存在这么一个相交cnt次的公共点li,那么在分组的时候,至少就必须有cnt组,至于是不是比如大于我们不用管,有了前面的这个“至少”就已经完全可以说明所有方案的分组数全部>=cnt,那么最小的分组数就必然大于等于cnt,证毕。

 代码

#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
using namespace std;
typedef pair<int,int>PII;
const int N=100010;
int n;
PII range[N];
int main()
{scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d%d",&range[i].first,&range[i].second);priority_queue<int,vector<int>,greater<int>>heap;sort(range,range+n);for(int i=0;i<n;i++){if(heap.empty()||heap.top()>=range[i].first)heap.push(range[i].second);else{heap.pop();heap.push(range[i].second);}}cout<<heap.size();return 0;
}

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

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

相关文章

MongoDB 双机热备那篇文章是 “毒”

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…

yo!这里是Linux基础开发工具介绍

目录 前言 基础开发工具 yum vim 1.基本介绍 2.基本操作 3.正常模式常用命令 4.底行模式常用命令 gcc/g gdb 1.基本介绍 2.常用操作 make/Makefile 1.背景 2.介绍 3.使用 git 1.介绍 2.操作 进度条程序简单实现 后记 前言 在学完初步的基础指令及权限控…

浏览器输入一个URL之后发生了什么?

URL解析DNS解析TCP连接TSL连接HTTP请求TCP挥手接收并解析响应 URL 解析 主要分为&#xff1a; 协议&#xff0c;eg http,https域名或者ip地址&#xff0c;eg www.baidu.com 域名相对于ip地址来说&#xff0c;更方便人们记忆&#xff0c;但是实际的网络传输中使用的是ip地址 端…

c++查漏补缺(1)

目录 1.explicit关键字 2.static关键字 3.友元函数 1.explicit关键字 exeplicit关键字是在构造函数要使用的关键字。可以防止“隐式构造”&#xff0c;例如&#xff1a; #include<iostream>using namespace std;class Date { public:explicit Date(int year, int mo…

当我焦虑时,我从CSDN的博主身上学到了什么?

文章目录 前言一、思考为什么会产生差距1.1 懒惰1.2 没有合理的规划学习时间 二、我该如何做&#xff1f;2.1 认真生活规律作息2.2 做事就是0和1 结语 前言 我们在学习的过程当中总会遇到一些比我们自己优秀的人&#xff0c;不论你是在更好的985或211院校学习&#xff0c;还是…

PHP8函数的引用和取消-PHP8知识详解

今天分享的是php8函数的引用和取消&#xff0c;不过在PHP官方的参考手册中&#xff0c;已经删除了此类教程。 1、函数的引用 在PHP8中不管是自定义函数还是内置函数&#xff0c;都可以直接简单的通过函数名调佣。函数的引用大致有下面3种&#xff1a; 1.1、如果是PHP的内置函…

C#_委托详解

委托是什么&#xff1f; 字面理解&#xff1a;例如A要建一栋别墅&#xff0c;找到B建筑施工队&#xff0c;请B来建筑别墅。 委托类型规定方法的签名&#xff08;方法类型&#xff09;&#xff1a;返回值类型、参数类型、个数、顺序。 委托变量可以用来存储方法的引用&#x…

Spring -学习笔记

文章目录 1. Spring介绍1.1 Spring的体系结构 2.DI/Ioc&#xff08;依赖注入/控制反转&#xff09;2.1 依赖及注解说明1. lombok2. spring-context 2.2 Bean和Spring 上下文的配置方式方式1&#xff1a;基于xml文件的配置方法2&#xff1a; 基于java注解配置bean方法3&#xff…

Nginx详解 第三部分:Nginx高级配置(附配置实例)

Part 3 一、网页的状态页二、Nginx第三方模块2.1 echo 模块 三、变量3.1 内置变量3.1.1 常用内置变量3.1.2 举个例子 3.2 自定义变量 四、自定义访问日志 (优化)4.1 自定义访问日志的格式4.2 自定义json 格式日志 五、Nginx压缩功能&#xff08;重要&#xff09;六、HTTPS 功能…

Android RecyclerView 之 列表宫格布局的切换

前言 RecyclerView 的使用我就不再多说&#xff0c;接下来的几篇文章主要说一下 RecyclerView 的实用小功能&#xff0c;包括 列表宫格的切换&#xff0c;吸顶效果&#xff0c;多布局效果等&#xff0c;今天这篇文章就来实现一下列表宫格的切换&#xff0c;效果如下 一、数据来…

香港全新的虚拟资产服务商发牌制度

香港证监会2023年2月20日通告&#xff0c;原有虛擬資產交易平台如要符合資格參與當作為獲發牌的安排&#xff0c;必須在2023 年6 月1 日至2024 年2 月29 日期間(即由2023 年6 月1 日37起計九個月內)內&#xff0c;根據《打擊洗錢條例》下的虛擬資產服務提供者制度在網上提交完全…