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

区间分组详解

步骤

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

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.xdnf.cn/news/1134.html

相关文章:

  • 【C++】智能指针原理以及详细讲解shared_ptr精简版实现
  • 一个 HTTP 请求进入 Spring MVC 应用后,大致经历了哪些主要步骤?
  • 【C++】——入门基础(一)
  • 关于el-table可展开行实现懒加载的方案
  • 网易云IP属地可以查看城市吗?深度解析与使用指南
  • [创业之路-380]:企业法务 - 企业经营中,企业为什么会虚开増值税发票?哪些是虚开増值税发票的行为?示例?风险?
  • 使用 acme.sh 自动更新 SSL 证书的指南
  • 【Java面试笔记:基础】6.动态代理是基于什么原理?
  • el-popover实现下拉滚动刷新
  • C语言高频面试题——指针函数和函数指针的区别
  • 【Java面试笔记:基础】4.强引用、软引用、弱引用、幻象引用有什么区别?
  • 【c++深入系列】:万字string详解(附有sso优化版本的string模拟实现源码)
  • rpm命令详解
  • java的反编译命令
  • 小小矩阵设计
  • 重学React(一):描述UI
  • 【Python进阶】数据可视化:Matplotlib从入门到实战
  • 解码思维链:AI思维链如何重塑人类与机器的对话逻辑
  • 解决 MongoDB 查询中的 `InvalidMongoDbApiUsageException` 错误
  • 密码学货币混币器详解及python实现
  • ASP.Net Web Api如何更改URL
  • 【前端】【业务逻辑】【面试】 大数据表格的表单校验导致性能问题,如何优化?
  • 【Nova UI】七、SASS 全局变量体系:组件库样式开发的坚固基石
  • 【Unity MetaQuest】Unity6使用Meta all in one sdk打包安装到Quest2设备后,运行后闪退或者一直卡在3个点上解决办法
  • ViewBS 的工作流程
  • GitHub 常见高频问题与解决方案(实用手册)
  • 【质量管理】“武藏曲线”和“微笑曲线”的差异
  • 【第16届蓝桥杯C++C组】--- 2025图形
  • CentOS 6.9 安装 Zabbix 3.0 详细教程
  • uniapp Vue2升级到Vue3,并发布到微信小程序的快捷方法