题意:

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

$1\leq n,m\leq 2\times 10^5$

$0\leq L_i<R_i\leq m+1$

题解:

这题其实有一个显然的网络流解法,但是直接建图会爆,用线段树优化建图可以过,写的会很麻烦。。。(Orzckw)

场上dalao们八仙过海以不同的姿势各种贪心水到了大量分数。。。

正解是一个优秀的贪心。考虑只有一边的限制(比如只有$L$),那么显然的贪心是,从左到右枚举每个椅子,在$L_i$处决定每个人坐在哪,然后每向后一个椅子就能多放一个,考虑有多少人左端点在当前枚举到的椅子,能放就尽量放,多的就不放,并将空位设为0;

加上$R$的条件其实类似,把每个人记录在$L$上,然后能放就尽量放,遇到放不下的情况时可以考虑用新的这个人代替掉原来的人,条件是他的$R$比原来的人的$R$要大,这样可以保证换出来的人更容易重新放进去。那么用小根堆维护$R$,然后扫一遍即可;

枚举完把放好的人拎到一边,反着做一次只考虑$R$的贪心,即可求出答案。

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
struct task{
int l,r;
}a[];
priority_queue<int>q;
pair<int,int>pi[];
bool cmp(task a,task b){
return a.l==b.l?a.r<b.r:a.l<b.l;
}
int n,m,l,r,tot=,ans=,now[];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d%d",&a[i].l,&a[i].r);
sort(a+,a+n+,cmp);
l=,r=m;
for(int i=;i<=n;i++){
q.push(-a[i].r);
if(l<=r&&l<=a[i].l)l++;
else{
now[++tot]=-q.top();
q.pop();
}
}
sort(now+,now+tot+);
for(int i=tot;i;i--){
if(l<=r&&r>=now[i])r--;
else ans++;
}
printf("%d",ans);
return ;
}

最新文章

  1. jquery的checkbox 全选和全不选
  2. [转]maven安装以及eclipse配置maven
  3. Grails 对象关联映射 (GORM) 一
  4. 使用Script元素发送JSONP请求
  5. elasticsearch常用的插件
  6. 动态树LCT
  7. C# String 与 byte 互转
  8. Android 锁屏状态/锁屏密码等相关
  9. RAC优化大框架的分配(jumbo frame)
  10. Iterator——迭代接口
  11. Java面试系列
  12. phpcms ——模板标签详细使用说明
  13. 如何把我的Java程序变成exe文件?
  14. IBM与麻省理工学院联合建立AI实验室 承诺投资2.4亿美元
  15. HDU2036 改革春风吹满地
  16. 在Tomcat中配置单点登录
  17. c语言第二次作业2
  18. VUE 安装及项目创建
  19. laradock
  20. SQL Server 创建索引方法

热门文章

  1. ZBrush中移动笔刷介绍
  2. BZOJ2179: FFT快速傅立叶 FFT实现高精度乘法
  3. CF859C Pie Rules 动态规划 逆推_思维题
  4. 使用json_decode无法解析json
  5. org.xml.sax.SAXParseException: Failed to read schema document 的原因分析与解决方法
  6. php的更新
  7. H5图片上传、压缩
  8. java实现随机数的生成
  9. sqrt开平方算法的尝试,是的看了卡马克大叔的代码,我来试试用C#写个0x5f3759df和0x5f375a86跟System.Math.Sqrt到底哪个更强
  10. bitset优化背包