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

本文共 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

你可能感兴趣的文章
使用JRegistry来操作window系统注册表
查看>>
函数递归,算法之二分法,表达式,生成式,匿名函数及常用内置函数
查看>>
Nginx,uWSGI与Django 应用的关系
查看>>
Html显示地图
查看>>
MySQL索引选择问题(要相信MySQL自己选择索引的能力)
查看>>
Angular i18n
查看>>
xcode 5.1,引入第三方库,因为第三方库都是自己管理内存,和ARC冲突,需要为部分文件添加Compiler Flags -fno-objc-arc...
查看>>
向数据库中插入一个DateTime类型的数据到一个Date类型的字段中,需要转换类型。TO_DATE('{0}','YYYY-MM-DD'))...
查看>>
【python】关键网站
查看>>
LeetCode 25 —— K 个一组翻转链表
查看>>
Ansible的roles标准化与Jenkins持续集成(三)
查看>>
POJ1006(中国剩余定理)
查看>>
【JS】jQuery中将数组转换成字符串join()和push()使用
查看>>
SQL--DDL
查看>>
httpclient调用https
查看>>
CentOS下配置jdk
查看>>
Android 串口通信
查看>>
jQuery如何退出each循环 和如何退出function函数
查看>>
二维数组中的查找
查看>>
每日分享
查看>>