题意:

给你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 ;
}

[arc076f]Exhausted? - 贪心的更多相关文章

  1. [arc076F]Exhausted? 贪心+堆

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

  2. [arc076F]Exhausted?

    Description 传送门 Solution 额外的椅子可以放置在任意实数位置,所以该问题其实就问最多能够有多少人坐下.由于每个人的需求有<=l和>=r两个限制,并不是很好下手,我们先 ...

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

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

  4. AtCoder刷题记录

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

  5. 【学习】Hall’s Marriage Theorem

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

  6. NOIp模拟赛二十八

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

  7. 【AtCoder Regular Contest 076 F】Exhausted (贪心)

    Description 机房里有M台电脑排成一排,第i台电脑的坐标是正整数i. 现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要 ...

  8. 【ARC076F】 Exhausted

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

  9. 【贪心】洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle 题解

        不是很容易写出正解的贪心问题. 题目描述 Although Farmer John has no problems walking around the fair to collect pri ...

随机推荐

  1. poj 3160 Father Christmas flymouse【强连通 DAG spfa 】

    和上一道题一样,可以用DAG上的动态规划来做,也可以建立一个源点,用spfa来做 #include<cstdio> #include<cstring> #include< ...

  2. MySQL查询结果保存到本地

    #!/bin/bash mysql -h<公网IP> -P<端口号> -u<用户名> -p<密码> -D<指定数据库> >/Users ...

  3. Python-超好用的Django源码解析

    http://djangobook.py3k.cn/2.0/

  4. Pyhton学习——Day36

    #异步IO——Asynchronous#异步效率最高,特点:全程无阻塞# 在说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义.# Stevens给出的定 ...

  5. NOIP2016 天天爱跑步 (树上差分+dfs)

    题目大意:给你一颗树,树上每个点都有一个观察员,他们仅会在 w[i] 时刻出现,观察正在跑步的玩家 一共有m个玩家,他们分别从节点 s[i] 同时出发,以每秒跑一条边的速度,沿着到 t[i] 的唯一路 ...

  6. (转)C++引用

    前言:引用是C++一个很重要的特性,最近看了很多有关引用的资料和博客,故在此对引用的相关知识进行总结 一.什么是引用 引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作 ...

  7. UVALive 5412 Street Directions

    Street Directions Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. ...

  8. Apache Tez 0.7、0.83、 0.82 安装、调试笔记

    ———————————————————— 准备 Tez 编译环境 ———————————————————— 1 需要的支持 tez0.7 需要 Hadoop 2.60 以上 2 需要的 linux 相 ...

  9. mysql数据库连接工具类C3P0

    package com.dl.network_flow.db; import java.sql.Connection; import java.sql.PreparedStatement; impor ...

  10. Perl怎样过滤html标签

    比方一串字符串 <div><b>123</b></div> 假设仅仅想拿到123怎么办呢? 用perl的正則表達式能够非常easy的做到. $str = ...