2017国家集训队作业[arc076d/f][Exhausted?]
2017国家集训队作业[arc076d/f][Exhausted?]
题意:
有\(N\)个人,\(M\)把椅子,给出\(、、、L_i、R_i\)表示第\(i\)个人可以选择编号为\(1\sim L_i\)和\(R_i\sim M\)的椅子,求至少要加多少张椅子才能让每人都有椅子坐?(\(N,M\le2*10^5\))
题解:
场上看到这道题,woc,这不是sb的线段树或前缀和优化网络流建边二分图匹配吗?(这沙茶= =)
听dcx说,这题网络流建出来是分层图,流量是\(INF\)的可以贪心模拟?不会= =。
场后听到题解,还真是贪心,而且贪心方法五花八门。。。这里讲我最后用的方法。
按\(L_i\)排升序,枚举,若到第\(i\)个人时,\(L_i < i\),那就把前\(i\)个人中\(R_i\)最小的人匹配的椅子放到后半段去。优先队列维护。枚举\(R_i\)同理,注意终止边界就可以了。仔细想想,这贪心还挺对的,本蒟蒻场上满脑子优化建图还是太弱。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define of(i,l,r) for(int i=l;i>=r;i--)
#define fe(i,u) for(int i=head[u];i;i=e[i].next)
using namespace std;
typedef long long ll;
inline int rd()
{
static int x,f;
x=0,f=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
const int N=200010;
struct node{int l,r;bool bo;}a[N];
int n,m,l,r,ans=0;
bool cmpl(node a,node b){return (a.l==b.l)?a.r>b.r:a.l<b.l;}
bool cmpr(node a,node b){return a.r>b.r;}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ina.txt","r",stdin);
#endif
n=rd();m=rd();
l=1;r=m;
fo(i,1,n)a[i].l=rd(),a[i].r=rd();
sort(a+1,a+n+1,cmpl);
fo(i,1,n){
if(l>m)break;
if(l<=a[i].l){
ans++;l++;
a[i].bo=true;
}
}
sort(a+1,a+n+1,cmpr);
fo(i,1,n){
if(r<l)break;
if(!a[i].bo&&r>=a[i].r){
ans++;r--;
a[i].bo=true;
}
}
printf("%d\n",n-ans);
return 0;
}
UPD:2018/8/19 补上了代码
2017国家集训队作业[arc076d/f][Exhausted?]的更多相关文章
- 2017国家集训队作业Atcoder题目试做
2017国家集训队作业Atcoder题目试做 虽然远没有达到这个水平,但是据说Atcoder思维难度大,代码难度小,适合我这种不会打字的选手,所以试着做一做 不知道能做几题啊 在完全自己做出来的题前面 ...
- 2017国家集训队作业[agc016e]Poor Turkey
2017国家集训队作业[agc016e]Poor Turkey 题意: 一开始有\(N\)只鸡是活着的,有\(M\)个时刻,每个时刻有两个数\(X_i,Y_i\),表示在第\(i\)个时刻在\(X_i ...
- 2017国家集训队作业[agc006f]Blackout
2017国家集训队作业[agc006f]Blackout 题意: 有一个\(N*N\)的网格,一开始有\(M\)个格子被涂黑,给出这\(M\)个格子,和染色操作:如果有坐标为\((x,y),(y,z) ...
- 2017国家集训队作业[agc004f]Namori
2017国家集训队作业[agc004f]Namori 题意: 给你一颗树或环套树,树上有\(N\)个点,有\(M\)条边.一开始,树上的点都是白色,一次操作可以选择一条端点颜色相同的边,使它的端点颜色 ...
- 2017国家集训队作业[arc082d]Sandglass
2017国家集训队作业[arc082d]Sandglass 题意: 有一个沙漏,初始时\(A\)瓶在上方,两个瓶子的最大容量都为\(X\)克,沙子流动的速度为\(1g\)每单位时间.给出\(K\) ...
- 2017国家集训队作业[agc006e]Rotate 3x3
2017国家集训队作业[agc006e]Rotate 3x3 题意: 给你一个\(3*N\)的网格,每次操作选择一个\(3*3\)的网格,旋转\(180^\circ\).问可不可以使每个位置\(( ...
- 2017国家集训队作业[agc014d]Black and White Tree
2017国家集训队作业[agc014d]Black and White Tree 题意: 有一颗n个点的树,刚开始每个点都没有颜色.Alice和Bob会轮流对这棵树的一个点涂色,Alice涂白,B ...
- 2017国家集训队作业[agc008f]Black Radius
2017国家集训队作业[agc008f]Black Radius 时隔4个月,经历了省赛打酱油和中考各种被吊打后,我终于回想起了我博客园的密码= = 题意: 给你一棵树,树上有若干个关键点.选中某 ...
- 2017国家集训队作业[agc016b]Color Hats
2017国家集训队作业[agc016b]Color Hats 题意: 有\(N\)个人,每个人有一顶帽子.帽子有不同的颜色.现在,每个人都告诉你,他看到的所有其它人的帽子共有多少种颜色,问有没有符合所 ...
随机推荐
- 51Nod 最长的循环节(打表预处理)
正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数. 1/6= ...
- UI Framework-1: Aura Multi-desktop
Multi-desktop Aura now makes it possible for the same browser process to render to multiple desktops ...
- 洛谷P3402 【模板】可持久化并查集
一定注意每一次都要是 $root[cur]=root[cur-1]$,不然进行合并时如果 $a,b$ 在同一集合中就会使 $root[cur]=0$. Code: #include <cstdi ...
- git rebase 的使用 (用于撤销某次commit)
Q: I wrote the wrong thing in a commit message. Alternatively, I've forgotten to include some files. ...
- 前端之CSS介绍
CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS的语法 CSS语 ...
- [WC2011]最大XOR和路径(线性基)
P4151 [WC2011]最大XOR和路径 题目描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如下( 1 表示真, 0 表 ...
- Snail—UI学习之导航视图控制器UINavigationController(系统)
背景 有一个根视图控制器 然后跳转到第一个界面 第一个界面能够返回到根视图 也能够跳转到第二个视图 第二个视图能够直接返回到根视图 新建三个ViewController RootViewCon ...
- windows linux 双系统默认启动windows 的几种方法
装了双系统后,在开机时总会有想让一个系统默认启动的时候,一般安装完Ubuntu和XP双系统后,开机时默认的是启动Ubuntu系统,可是当想让XP作为默认启动的系统时怎么办呢? 在早期的Ubuntu系统 ...
- java基础 this keyword!
为了程序的可读性,通常将一个类中的表示同一属性的变量进行统一的命名.可是这样做又会导致成员变量与局部变量名字冲突导致无法訪问成员变量.为了解决问题,java中引入了this这个keyword!所以th ...
- 之前搭建的jenkins的一些笔记
wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo rpm --import http:// ...