Description

  

​   题目链接

  

  

  

Solution

  

​   场上尝试使用优化建图网络流实现,结果T到怀疑人生。

  

​   鉴于这是个匹配问题,考虑用贪心做一下。

  

​   先退一步,想一下如果每一个人只有\([1,l_i]\)单个限制时怎么匹配。

  

​   我们应该对所有人按\(l_i\)从小到大排序。从前往后扫一次,能放则放,就能做到最大匹配。

  

​   再加上\([r_i,m]\)这一种选择,要怎么做?

  

​   上面的贪心法,如果只考虑靠左端的匹配,是正确的;但不被匹配的人,显然要单独拉出,做一次按\(r\)的与上一个样的贪心。我们能不能在进行左端贪心的时候,保证剩余的人在第二次右端贪心时全局最优呢?有一种直接的想法,就是剩余人的\(r\)要尽可能的小,这样才能最大化匹配成功率。

  

​   依然按\(l_i\)从小到大排序,能放则放;如果不能放呢?这时候我们要考虑多一些东西了,我们还有一种选择,就是用当前的人替代掉之前选择的一个人。如果当前人能替代已选择的某一个人,应该满足一个条件,就是当前人的\(r\)要大于已经选择的某一个人的\(r\)。如果这样一个人存在,显然用将那个人的位置空出来,让当前人进去,而让那个人不填更加优,因为这样可以使未填的人的\(r\)尽可能小,最大化匹配成功率。

  

​   因此对于已选择的人,关于\(r\)维护一个小根堆。如果能加则加,否则和堆顶的\(r\)进行比较,能替换则替换。

  

​   最后对于未选择的人,进行一次从右向左对于\(r\)的贪心即可。

  

  

  

Code

  

#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int N=200005;
int n,m;
struct People{
int l,r,id;
friend bool operator < (People a,People b){
return a.r>b.r;
}
}a[N],b[N];
bool inq[N];
int cnt;
priority_queue<People> q;
bool cmpl(const People &a,const People &b){
return a.l<b.l;
}
bool cmpr(const People &a,const People &b){
return a.r>b.r;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i].l,&a[i].r);
sort(a+1,a+1+n,cmpl);
int nowl=0,nowr=m+1,last;
for(int i=1;i<=n;i++){
a[i].id=i;
if(nowl+1<=a[i].l){
nowl++;
q.push(a[i]);
inq[i]=true;
}
else if(!q.empty()){
People best=q.top();
if(a[i].r>best.r){
q.pop();
inq[best.id]=false;
q.push(a[i]);
inq[i]=true;
}
}
}
for(int i=1;i<=n;i++)
if(!inq[i])
b[++cnt]=a[i];
sort(b+1,b+1+cnt,cmpr);
for(int i=1;i<=cnt&&nowr-1!=nowl;i++)
if(nowr-1>=b[i].r)
nowr--;
printf("%d\n",n-(nowl+(m-nowr+1)));
return 0;
}

【ARC076D/F】Exhausted?的更多相关文章

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

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

  2. 【SDOI2018】反回文串(【ARC064 F】Rotated Palindromes 加强版)

    题意 给你一个正整数 \(n\),求有多少字符集为 \(1\) 到 \(k\) 之间整数的字符串,使得该字符串可以由一个长度为 \(n\) 的回文串循环移位得到. ARC原题 \(100\%\) 的数 ...

  3. 【AGC005 F】Many Easy Problems

    神他吗一天考一道码农题两道 FFT(其实还是我推式子一窍不通) 题意 给你一棵 \(n\) 个点的树,再给你一个常数 \(k\). 设 \(S\) 为树上某些点的集合,定义 \(f(S)\) 为最小的 ...

  4. 模仿天猫实战【SSM版】——后台开发

    上一篇文章链接:模仿天猫实战[SSM版]--项目起步 后台需求分析 在开始码代码之前,还是需要先清楚自己要做什么事情,后台具体需要实现哪些功能: 注意: 订单.用户.订单.推荐链接均不提供增删的功能. ...

  5. 【大数据安全】基于Kerberos的大数据安全验证方案

    1.背景 互联网从来就不是一个安全的地方.很多时候我们过分依赖防火墙来解决安全的问题,不幸的是,防火墙是假设"坏人"是来自外部的,而真正具有破坏性的攻击事件都是往往都是来自于内部的 ...

  6. X86逆向1:软件破解入门课【课件下载】

    从本节课开始,我将带领小白入门学习软件破解的相关内容,大佬绕过,以后将会定期更新从最基本的破解知识点开始学习,由简单到复杂循序渐进,难度会逐步提高. 为了防止版权方面的争议,我将自行编写一些破解案例来 ...

  7. 【最大流】ECNA 2015 F Transportation Delegation (Codeforces GYM 100825)

    题目链接: http://codeforces.com/gym/100825 题目大意: N(N<=600)个点,每个点有个名字Si,R(R<=200)个生产商在R个点上,F(F<= ...

  8. 【最短路】NEERC15 F Froggy Ford(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一只青蛙跳过宽为W的河,河中游N个石头,坐标xi,yi,现在往河中间添加一个石头,使得每次跳跃的最大的距离最小 ...

  9. 【郑轻邀请赛 F】 Tmk吃汤饭

    [题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2132 [题意] [题解] 很容易想到用队列来模拟; 这个队列维护的是正在煮的4个人煮 ...

随机推荐

  1. 20155202张旭 Exp4 恶意代码分析

    20155202张旭 Exp4 恶意代码分析 实验前问题回答: 一:如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来 ...

  2. Python基础(条件判断和循环) if elif else for while break continue;

    条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= ...

  3. Compensating-Transaction模式

    在应用中,会将一系列相关的操作定义为一个连续的操作,当其中一个或者多个步骤失败的时候,Compensating-Transaction模式会重置(回滚)这个连续的操作.在云应用中,这些需要保证一致性的 ...

  4. Hadoop日记Day16---命令行运行MapReduce程序

    一.代码编写 1.1 单词统计 回顾我们以前单词统计的例子,如代码1.1所示. package counter; import java.net.URI; import org.apache.hado ...

  5. gulp.src()内部实现探究

    写在前面 本来是想写个如何编写gulp插件的科普文的,突然探究欲又发作了,于是就有了这篇东西...翻了下源码看了下gulp.src()的实现,不禁由衷感慨:肿么这么复杂... 进入正题 首先我们看下g ...

  6. JQ_插件开发

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...

  7. openstack horizon 开发第三天

    工作流:工作流是带有选项的复杂表单,每个工作流必须包含扩展Workflow, Step和的类Action1. url.py 路由处理 RESOURCE_CLASS = r'^(?P<resour ...

  8. 三丰云使用记录--部署iis服务器

     写在前面的话:看在我这么热心写使用推广记录,麻烦延长下使用天数,谢谢 官网地址:https://www.sanfengyun.com 三丰云是北京太极三丰云计算有限公司旗下网络服务品牌,十八年IDC ...

  9. Go语言实现数据结构(一)单链表

    1.基本释义 2.结构体设计 3.基本方法设计 4.Main函数测试 1. 基本释义 线性表包含两种存储方法:顺序存储结构和链式存储结构,其中顺序表的缺点是不便插入与删除数据:接下来我们重点实现基于G ...

  10. 微软职位内部推荐-SW Engineer II for Azure Network

    微软近期Open的职位: Software Engineer II The world is moving to cloud computing. Microsoft is betting Windo ...