[arc076F]Exhausted?
Description
Solution
额外的椅子可以放置在任意实数位置,所以该问题其实就问最多能够有多少人坐下。
由于每个人的需求有<=l和>=r两个限制,并不是很好下手,我们先考虑一个限制的情况(贪心)。
我们把所有的需求按照l排序。然后从1到m枚举椅子,记录一个empty(即目前1-i位的空位数)。枚举到i的时候考虑将所有lj=i需求加入,每加入一个empty--。如果empty为0,并且目前坐了椅子的人中有某一个人k需求的rk比rj要小,则可以用j的信息替换k(因为在后续枚举r的时候k坐下的概率比j大)。这里需要用优先队列记录当前坐了椅子的人的最小值,进行替换即可。
之前处理l的时候需要把没有坐下的人记录下来,然后通过empty值知道目前的空位为m-empty+1到m,直接排序枚举即可。
正确性:如果一个人没有坐下,要么是因为它的l=0,r=m+1,根本没有合适位置;要么是因为在枚举r的时候空位不够了。我们在枚举l,将1-某个数的椅子填满的时候已经把所有尽量小的r剩下来了,如果在这种情况下都没有空位,那是无论如何都找不到剩余空位的了(或者他能坐下的前提必然是另一个人站起来)。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int n,m,ans,_empty=,_empty1=,top=,cnt1=;
struct node{int l,r;
friend bool operator <(node a,node b){ return b.r<a.r;}
}p[],p1[],c;
bool cmp(node a,node b){return a.l<b.l;}
bool cmp1(node a,node b){return a.r<b.r;}
priority_queue<node>q;
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d%d",&p[i].l,&p[i].r);
sort(p+,p+n+,cmp);
for(;p[top].l==&&top<=n;top++) p1[++cnt1]=p[top];
for (int i=;i<=m;i++)
{
_empty++;
for(;p[top].l==i;top++)
{
if (_empty) _empty--,q.push(p[top]),ans++;
else
{
c=q.top();if (p[top].r>c.r) q.pop(),q.push(p[top]),p1[++cnt1]=c;
else p1[++cnt1]=p[top];
}
}
}
sort(p1+,p1+cnt1+,cmp1);
top=;
if (cnt1)
{
for (int i=m-_empty+;i<=m;i++)
{
if (p1[top].r<=i&&top<=cnt1)ans++,top++;
}
} printf("%d\n",n-ans); }
[arc076F]Exhausted?的更多相关文章
- [arc076F]Exhausted?[霍尔定理+线段树]
题意 地上 \(1\) 到 \(m\) 个位置摆上椅子,有 \(n\) 个人要就座,每个人都有座位癖好:选择 \(\le L\) 或者 \(\ge R\) 的位置.问至少需要在两边添加多少个椅子能让所 ...
- [arc076F]Exhausted? 贪心+堆
Description 有m个椅子,第i个在位置i,每个椅子只能坐一个人. 有n个人,第i个人能坐的椅子的位置j需满足j≤Li或j≥Ri. 现在你可以添加若干个椅子,可以放在任意实数位置.问最 ...
- [arc076f]Exhausted? - 贪心
题意: 给你m个椅子可以坐人,初始坐标为正整数1~m,有n个人,每个人希望坐的位置$\leq L_i$或者$\geq R_i$,可以添加若干个椅子在任意的实数位置,求最少要添加多少椅子使得所有人都有位 ...
- 【学习】Hall’s Marriage Theorem
其实是在做题时遇到这个定理的. 这个定理的图论意义是: 对于一个二分图\(G=\{X+Y,E\}\),它满足: \(\forall W \subseteq X, \, |W| \leq |N_G(W) ...
- NOIp模拟赛二十八
(这是NOIp模拟赛?应该是NOI模拟赛不小心加了个p) 嗯,假装这是正经的NOIp模拟赛,从今天开始也写写题解吧(这几天被虐的惨惨) 今日情况:8+50+0=58 A题输出样例,B题正解写挂,C题不 ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
- 【ARC076F】 Exhausted
hall定理大概是匈牙利的理论基础吧 hall定理的内容:二分图\(G\)的的左部点点集为\(\rm X\),右部点点集为\(\rm Y\),设\(|\rm X|\leq |Y|\),则二分图\(G\ ...
- php编译 :virtual memory exhausted: Cannot allocate memory
有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...
- Cannot get a connection, pool exhausted解决办法
http://blog.163.com/it_message/blog/static/8892051200908102032653/ 连接池(Tomcat+oracle),运行一段时间后就会出现 Ca ...
随机推荐
- jq实现鼠标经过出现上拉菜单
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- myeclipse解决JSP文件里script背景颜色的调整
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/27971401 1导入MyEclipse的主题 ...
- BZOJ4870:[SHOI2017]组合数问题(组合数学,矩阵乘法)
Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 ...
- 2、Dubbo-核心概念
dubbo核心概念 2.1).简介 Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源Java RPC框架, 它提供了三大核心能力:面向接口的远程方法调用 ...
- pgAdmin4 重置布局
pgAdmin4 是网页版客户端,而且在其网页上可以通过拖拽改变布局.当布局混乱时可以通过 菜单File--Reset Layout功能来重置. 如果这篇随笔只是为了说以上这句话就没必要了,而且你根据 ...
- 模块XXXX可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86(32位)x64(64位)版本兼容。
最近自己在编写ActiveX控件.遇到的麻烦事不少. 今天遇到了这个问题“模块XXXX可能与您正在运行的Windows版本不兼容.检查该模块是否与regsvr32.exe的x86(32位)x64(64 ...
- webpack4.x最详细入门讲解
前言 本文主要从webpack4.x入手,会对平时常用的Webpack配置一一讲解,各个功能点都有对应的详细例子,所以本文也比较长,但如果你能动手跟着本文中的例子完整写一次,相信你会觉得Webpack ...
- centos7 安装拼音输入法
依次选择Applications->System Tools->setting->Regiin&Language,添加Chinese(Intelligent Pinyin) ...
- Mybatis-smart(Mybatis最终优化方案)
Hibernate: 我用了Hibernate一年多,可以说是饱经风雨,感受极深,Hibernate看似一个很好的框架,我简单说一下它的使用痛点, 1.作为开发人员,我们应该全新全意关注我们的功能业务 ...
- activeMQ的spring、springboot的DEMO
一.activeMQ实现spring的demo 1:pom.xml文件 <dependencies> <dependency> <groupId>junit< ...