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?的更多相关文章

  1. [arc076F]Exhausted?[霍尔定理+线段树]

    题意 地上 \(1\) 到 \(m\) 个位置摆上椅子,有 \(n\) 个人要就座,每个人都有座位癖好:选择 \(\le L\) 或者 \(\ge R\) 的位置.问至少需要在两边添加多少个椅子能让所 ...

  2. [arc076F]Exhausted? 贪心+堆

    Description ​ 有m个椅子,第i个在位置i,每个椅子只能坐一个人.  有n个人,第i个人能坐的椅子的位置j需满足j≤Li或j≥Ri.  现在你可以添加若干个椅子,可以放在任意实数位置.问最 ...

  3. [arc076f]Exhausted? - 贪心

    题意: 给你m个椅子可以坐人,初始坐标为正整数1~m,有n个人,每个人希望坐的位置$\leq L_i$或者$\geq R_i$,可以添加若干个椅子在任意的实数位置,求最少要添加多少椅子使得所有人都有位 ...

  4. 【学习】Hall’s Marriage Theorem

    其实是在做题时遇到这个定理的. 这个定理的图论意义是: 对于一个二分图\(G=\{X+Y,E\}\),它满足: \(\forall W \subseteq X, \, |W| \leq |N_G(W) ...

  5. NOIp模拟赛二十八

    (这是NOIp模拟赛?应该是NOI模拟赛不小心加了个p) 嗯,假装这是正经的NOIp模拟赛,从今天开始也写写题解吧(这几天被虐的惨惨) 今日情况:8+50+0=58 A题输出样例,B题正解写挂,C题不 ...

  6. AtCoder刷题记录

    构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...

  7. 【ARC076F】 Exhausted

    hall定理大概是匈牙利的理论基础吧 hall定理的内容:二分图\(G\)的的左部点点集为\(\rm X\),右部点点集为\(\rm Y\),设\(|\rm X|\leq |Y|\),则二分图\(G\ ...

  8. php编译 :virtual memory exhausted: Cannot allocate memory

    有时候用vps建站时需要通过编译的方式来安装主机控制面板.对于大内存的VPS来说一般问题不大,但是对于小内存,比如512MB内存的VPS来说,很有可能会出现问题,因为编译过程是一个内存消耗较大的动作. ...

  9. Cannot get a connection, pool exhausted解决办法

    http://blog.163.com/it_message/blog/static/8892051200908102032653/ 连接池(Tomcat+oracle),运行一段时间后就会出现 Ca ...

随机推荐

  1. Failed to read Class-Path attribute from manifest of jar file:/XXX问题

    java.lang.IllegalStateException: Failed to read Class-Path attribute from manifest of jar file:/XXX ...

  2. BZOJ1014:[JSOI2008]火星人(Splay,hash)

    Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam, 我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 ...

  3. tar 打包带软连接的文件

    打包普通文件夹,压缩带参数z,创建tar.gz tar -cvf ./tmp/SK_Aug_camera.tar ./gap_40_5 但是文件夹里含有软连接,带参数 h tar -cvhf ./tm ...

  4. 好用的纯CSS加载动画-spinkit

    首先放一个css  spinkit <style> .loaders{ width: 100%; height: 100%; padding: 100px; box-sizing: bor ...

  5. No.1 - 制作一个简单的菜单动画效果---百度IFE

    最近比较闲,在家做点训练 http://ife.baidu.com/course/detail/id/18?t=1527144851578#learn CSS3新特性,兼容性,兼容方法总结 https ...

  6. javascript中获取dom元素高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  7. FD.io社区中国行暨未来网络技术沙龙·南京站 会议小结

    What is FD.io VPP? FD.io VPP(Fast Data Input/Output Vector Packet Processing)is a new network multi- ...

  8. SQL SERVER或oracl如何判断删除列

    ORACLE: BEGIN  EXECUTE IMMEDIATE 'DROP TABLE CUX_PO_VENDORS';EXCEPTION  WHEN OTHERS THEN    NULL;END ...

  9. ORA-00600:internal error code,arguments:[keltnfy-idmlnit],[46],[1],[],[],[],[],[]

    如图:在DBCA进行到3%时.报错 由于/etc/hosts与/etc/sysconfig/network不正确应,所以报错 [root@ocm2 ~]# cat /etc/hosts # Do no ...

  10. Android小游戏应用---撕破美女衣服游戏

    ImageView after; ImageView before; @Override protected void onCreate(Bundle savedInstanceState) { su ...