博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARC076F Exhausted
阅读量:4621 次
发布时间:2019-06-09

本文共 1059 字,大约阅读时间需要 3 分钟。

\(n\) 个人和 \(m\) 条板凳,每个板凳只能坐一个人,第 \(i\) 个人可以坐在编号为 \([1,\ l_i]\cup[r_i,\ m]\) 的板凳,求最少会有多少个人不能坐下。

\(n,\ m\leq2\times10^5,\ 0\leq l_i<r_i\leq m+1\)

贪心,数据结构


如果只有 \(l_i,\ r_i\) 中的一个限制,显然可以贪心。考虑升序枚举每一个人 \(i\) ,尽量安排在左侧,若左侧没有位置了,那么考虑将已经填在左侧的右端点最小的点和 \(i\) 交换(可以用堆维护)。这个过程做完之后,将剩下的点贪心安排在右端点,因为这相当于只剩 \(r_i\) 的限制,可以直接贪心。

时间复杂度 \(O(n\log n)\)

代码

#include 
using namespace std;const int maxn = 2e5 + 10;int n, m, tot, data[maxn];struct node { int l, r; inline bool operator < (const node &o) const { return l < o.l || (l == o.l && r < o.r); }} a[maxn];priority_queue
, greater
> Q;int main() { scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) { scanf("%d %d", &a[i].l, &a[i].r); } int L = 1, R = m; sort(a + 1, a + n + 1); for (int i = 1; i <= n; i++) { Q.push(a[i].r); if (L <= R && L <= a[i].l) { L++; } else { data[++tot] = Q.top(), Q.pop(); } } int ans = 0; sort(data + 1, data + tot + 1); for (int i = tot; i; i--) { L <= R && R >= data[i] ? R-- : ans++; } printf("%d", ans); return 0;}

转载于:https://www.cnblogs.com/Juanzhang/p/11327560.html

你可能感兴趣的文章
基础训练 芯片测试
查看>>
如何用命令将本地项目上传到git
查看>>
JavaScript 实现鼠标拖动元素
查看>>
js 模糊查询 (360接口)
查看>>
python+rabbitMQ实现生产者和消费者模式
查看>>
“模态”对话框和“后退”按钮
查看>>
关于javascript实现的网站页面侧边悬浮框"抖动"问题
查看>>
linux_命令格式和命令提示符
查看>>
Cocos2d-X-3.0之后的版本的环境搭建
查看>>
when case group by 的用法集合
查看>>
洛谷P1908 逆序对
查看>>
转义符
查看>>
poj 1019
查看>>
asp.net mvc上传文件
查看>>
bitmq集群高可用测试
查看>>
主成分分析(PCA)原理详解
查看>>
短信验证接口网址
查看>>
Geohash距离估算
查看>>
Demon_背包系统(实现装备栏,背包栏,可以切换装备)
查看>>
记录:一次数据库被恶意修改配置文件的问题
查看>>