【AtCoder Regular Contest 076 F】Exhausted (贪心)
Description
机房里有M台电脑排成一排,第i台电脑的坐标是正整数i。
现在有N个OIer进入了机房,每个OIer需要一台电脑来学tui习ji,同时每个OIer对自己电脑所处的坐标范围有一个要求区间。第i个OIer希望自己的电脑的位置≤Li或≥Ri。自然,一台电脑只能给一个OIer使用,不然会发生友♂好的跤♂流
显然,有可能这个机房无法满足所有OIer的需求。这时老师就会在机房中增加电脑。增加的电脑可以位于任意的实数位置。你需要帮老师计算一下,老师最少加几台电脑,才可以满足所有OIer的需求?
Input
第一行两个整数N,M
接下来N行,每行两个整数Li,Ri
Output
输出最小需要增加的电脑数量
题解
第一眼贪心,结果没过样例,就暴力打了个网络流。(结果我那个WA的贪心竟然比网络流高?!)
其实是我少考虑了。首先是如果是只有 \(L\) 限制或是 \(R\) 限制,那么很明显,先排序一遍,从两边开始往中间扫,能塞就塞,塞不了就加点。
但是,有了两个限制?我之前是按 \(L\) 作为第一关键字,\(R\) 作为第二关键字排序,但显然 \(R\) 不单调,直接贪心显然WA。
我们再考虑一下,如果左边塞不下了,那么无论如何,都要有一个人坐到右边,那么我们可以吧左边有位置的一个人踢出来,让他坐在右边。那我们肯定是吧 \(R\) 小的踢出来(容错率高)。
那就好办了,我们往左边塞的时候,坐不下就把 \(R\) 最小的踢掉,可以用小根堆维护。把左边塞完之后,再把没座位的,以同样的方法往右边塞,实在没办法就只能补了。
CODE:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int n,m,ans=0,tmp[200005];
struct Student{
int l,r;
bool operator<(const Student &b)const{
return l!=b.l?l<b.l:r>b.r;
}
}s[200005];
priority_queue<int,vector<int>,greater<int> > q;
int main(){
// freopen("data.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d%d",&s[i].l,&s[i].r);
sort(s+1,s+n+1);
int h=1,t=m;
for(int i=1;i<=n;i++){
q.push(s[i].r);
if(h<=t&&h<=s[i].l)h++;
else{
tmp[++tmp[0]]=q.top();
q.pop();
}
}
sort(tmp+1,tmp+tmp[0]+1);
for(int i=tmp[0];i>=1;i--){
if(h<=t&&tmp[i]<=t)t--;
else ans++;
}
printf("%d",ans);
}
【AtCoder Regular Contest 076 F】Exhausted (贪心)的更多相关文章
- AtCoder Regular Contest 076 F - Exhausted?
题意: n个人抢m个凳子,第i个人做的位置必须小于li或大于ri,问最少几个人坐不上. 这是一个二分图最大匹配的问题,hall定理可以用来求二分图最大匹配. 关于hall定理及证明,栋爷博客里有:ht ...
- AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图
AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图 链接 AtCoder 大意 在数轴上放上n个点,点i可能的位置有\(x_i\)或者\(y_i\ ...
- AtCoder Regular Contest 076
在湖蓝跟衡水大佬们打的第二场atcoder,不知不觉一星期都过去了. 任意门 C - Reconciled? 题意:n只猫,m只狗排队,猫与猫之间,狗与狗之间是不同的,同种动物不能相邻排,问有多少种方 ...
- AtCoder Regular Contest 074 F - Lotus Leaves
题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_d 题目大意: 给定一个\(H×W\)的网格图,o是可以踩踏的点,.是不可踩踏的点. 现有一人 ...
- AtCoder Regular Contest 076 E - Connected?
题目传送门:https://arc076.contest.atcoder.jp/tasks/arc076_c 题目大意: 给定一个\(R×C\)的矩阵,然后给定\(N\)对点,每对点坐标为\((X_{ ...
- AtCoder Regular Contest 081 F - Flip and Rectangles
题目传送门:https://arc081.contest.atcoder.jp/tasks/arc081_d 题目大意: 给定一个\(n×m\)的棋盘,棋盘上有一些黑点和白点,每次你可以选择一行或一列 ...
- AtCoder Regular Contest 066 F Contest with Drinks Hard
题意: 你现在有n个题目可以做,第i个题目需要的时间为t[i],你要选择其中的若干题目去做.不妨令choose[i]表示第i个题目做不做.定义cost=∑(i<=n)∑(i<=j<= ...
- AtCoder Regular Contest 067 F - Yakiniku Restaurants
题意: 有n个餐厅排成一排,第i个与第i+1个之间距离是Ai. 有m种食物,每种食物只能在一个餐厅里吃,第j种食物在第i个餐厅里吃的收益是$b[i][j]$. 选择每种食物在哪个餐厅里吃,使收益减去走 ...
- AtCoder Regular Contest 059 F Unhappy Hacking
Description 题面 Solution 我们发现如果一个位置需要被退掉,那么是 \(0\) 或 \(1\) 都没有关系 于是我们想到把 \(0,1\) 归为一类 问题转化为每一次可以添加和删除 ...
随机推荐
- 【转】C++ 值传递、指针传递、引用传递详解
而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下文会通过例子详细说明哦 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角 ...
- Mysql的一些纪要
unsigned 整型的每一种都分无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如 ...
- XPATH如何选择,t选取,包含某一属性的节点, 不包含某一个属性的节点?
https://blog.csdn.net/manmanpa/article/details/56282741 //tbody/tr[@class] 包含 //tbody/tr[not(@class) ...
- 无线Web开发
http://am-team.github.io/amg/dev-exp-doc.html
- 科学计算库Numpy——数组生成
等差数组 使用np.arange()或np.linspace()生成元素是等差数列的数组. 以10为底的数组 使用np.logspace()生成元素是以10为底的数组. 数组扩展 使用np.meshg ...
- Java总结 - List实现类ArrayList&LinkedList
本文是根据源码进行学习的,如果我有什么理解不对的地方请多指正,谢谢您 上面基本就是List集合类的类图关系了,图中省略掉了比如Cloneable等标记接口,那么List分别具体的主要实现类有:Arra ...
- 自定义token,保存到客户端的cookie中,
自定义token #原理自定义token,放入cookie中,不用存数据库 #token定义方式 >>>>> "加密字符串"|登陆用户id|用户登陆时 ...
- __setitem__,__getitem,__delitem__的作用
class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): print('obj[key]时, ...
- 678. Valid Parenthesis String
https://leetcode.com/problems/valid-parenthesis-string/description/ 这个题的难点在增加了*,*可能是(也可能是).是(的前提是:右边 ...
- I2C总线协议图解(转载)
转自:http://blog.csdn.net/w89436838/article/details/38660631 另外,https://blog.csdn.net/qq_38410730/arti ...