当前位置: 首页 > news >正文

区间分组详解

步骤

按照左端点排序原因(个人理解):让每个组的区间都排列的更加紧密,并且如果按照右端点排序,而不知道左端点的位置,可能造成误差

priority_queue<int>表示一个大根堆,队列的顶部存储的是最大的元素。

priority_queue<int, std::vector<int>, std::greater<int>>表示一个小根堆,队列的顶部存储的是最小的元素。

判断是否需要添加一个新组

 if (heap.empty() || heap.top() >= r.l) heap.push(r.r);//堆是空的或者堆顶的值大于该区间的左端点,需要开一个新组else{heap.pop();//删掉堆顶heap.push(r.r);//把当前的新的右端点加入堆}

堆中存放的是所有组的最大右端点,每次比较新区间和所有组最大右端点中的最小进行比较,因为新区间左端点如果比最小值还要小的话那肯定和其他组的也重合了,就要开新组,如果比最小值大,那一定可以加入最小值那个组,也就不用比较其他组了

AC代码

#include <iostream>
#include <algorithm>
#include <queue>using namespace std;const int N = 100010;int n;
struct Range
{int l, r;bool operator< (const Range &W)const{return l < W.l;}
}range[N];int main()
{cin>>n;for (int i = 0; i < n; i ++ ){int l, r;cin>>l>>r;range[i] = {l, r};}sort(range, range + n);priority_queue<int, vector<int>, greater<int>> heap;//小根堆,用来存储所有组的右端点最大值,堆顶存储的是目前所有组中最小的右端点for (int i = 0; i < n; i ++ ){auto r = range[i];if (heap.empty() || heap.top() >= r.l) heap.push(r.r);//堆是空的或者堆顶的值大于该区间的左端点,需要开一个新组else{heap.pop();//删掉堆顶heap.push(r.r);//把当前的新的右端点加入堆}}cout<<heap.size();//堆的大小就是组的个数return 0;
}

http://www.dtcms.com/a/148660.html

相关文章:

  • 83k Star!n8n 让 AI 驱动的工作流自动化触手可及
  • 使用Spark-TTS-0.5B模型,文本合成语音
  • Lua 第7部分 输入输出
  • React.cloneElement的用法详解
  • Flowable 与 bpmn.io@7.0 完整集成示例 Demo
  • 解决IntelliJ IDEA配置文件(application.properties)中文注释变成乱码的问题
  • 明远智睿2351开发板:四核1.4G处理器——开启高效能Linux系统新纪元
  • 耀百岁中医养生与上海隽生中医药研究中心达成战略合作——共筑中医养生科研创新高地
  • 【JavaEE】-- MyBatis操作数据库(1)
  • spring中使用netty-socketio部署到服务器(SSL、nginx转发)
  • STM32F103C8T6 HAL库 U盘模式(MSC)
  • Pycharm(十五)面向对象程序设计基础
  • Linux 内核中 cgroup 子系统 cpuset 是什么?
  • 【专题刷题】滑动窗口(三)
  • 【系统架构设计师】嵌入式微处理器
  • 2025-04-22| Docker: --privileged参数详解
  • Ansys Zemax | 在 MATLAB 中使用 ZOS-API 的技巧
  • 最美丽的区间
  • Trino分布式 SQL 查询引擎
  • [Java · 铢积寸累] 数据结构 — 数组类型 - 概念引入
  • 【数据结构和算法】5. 堆栈和队列
  • 算法基础_数据结构【KMP + Trie 树 + 并查集 】
  • postgreSQL 如何使用 dblink
  • 微信小程序拖拽排序有效果图
  • 机器人进阶---视觉算法(六)傅里叶变换在图像处理中怎么用
  • 【Pytorch 中的扩散模型】去噪扩散概率模型(DDPM)的实现
  • Facebook商城开通全攻略:如何解决所在地区不可使用问题?
  • IPoIB驱动接收路径深度解析:从数据包到协议栈
  • 在Pytorch中使用Tensorboard可视化训练过程
  • 晨控CK-FR12与欧姆龙NX系列PLC配置EtherNet/IP通讯连接操作手册