来迟了来迟了,忘写了。
我们来看看这道卡了本蒟蒻3个小时的题。
传送门luoguP7913廊桥分配
题目大意:分为了国内和国外两部分,飞机来了要么停廊桥要么走,有空位一定停,且停最小的,要如何分配廊桥才能使停的飞机数最大。
首先我们要知道一个事实:

对于n架飞机,有无数个廊桥,其中的一架飞机k,能够停在廊桥的要求是总的廊桥数大于等于从第一架来的飞机到它飞来时使它能停到廊桥的廊桥数。
换而言之,对于某一架飞机,使它能停靠的廊桥数与有多少个廊桥无关。
至于为什么,我们可以思考:
尽管有无数个廊桥,但是飞机是严格按照停靠在最小的廊桥上,只要能满足前k架飞机能全部停廊桥数,那么其余的廊桥是没有用上的。

得到这个事实我们可以得到:
可以就用给出的总廊桥数来模拟,对于每一个廊桥,可以统计出在这个廊桥有多少个飞机停,所以总飞机停靠个数就是1~k个廊桥上的飞机总和,这个只需要前缀和处理即可,最后枚举分配给国内,国外的廊桥数,并加到一起,更新max即可。
我们应该如何模拟飞机离开和进入呢?
这里使用两个优先队列来分别维护最小编号的廊桥和所在哪个廊桥的飞机离开时间。
首先先按飞机来的时间进行排序,将编号最小的廊桥给它,删除该廊桥,再将它的离开时间和该廊桥编号压入另一小根堆中,并以离开时间为第一关键字来排序。
对于每一架来的飞机,比较它来的时间和堆中飞机离开时间,若离开时间小于了来的时间,那么就说明该飞机已经离开,删除该飞机,并又将它所在的廊桥编号压入堆中,循环直达堆顶飞机的离开时间大于了它来的时间。
然后就又重复操作,取出最小编号的廊桥,删除,将该廊桥和它离开时间一同压入堆中即可。
处理完后,我们得到每一廊桥停靠的飞机数量,那么统计前缀和即是有这么多个廊桥能停靠的飞机总数量。枚举比较即可。
时间复杂度O(nlog2n)
代码实现:

#include<bits/stdc++.h>
using namespace std;const int N=1e5+5;
int n,m1,m2;
priority_queue<int>id;//最小廊桥编号
priority_queue<pair<int,int> >q;//飞机离开时间和它所在的廊桥编号
int cfa[N],cfb[N];//统计该廊桥有多少个飞机停
struct node
{int l,r;
}a[N];bool comp(node x,node y)
{return x.l<y.l;
}int main()
{scanf("%d%d%d",&n,&m1,&m2);for(int i=1;i<=m1;i++) scanf("%d%d",&a[i].l,&a[i].r);sort(a+1,a+m1+1,comp);for(int i=1;i<=n;i++) id.push(-i);for(int i=1;i<=m1;i++){while(!q.empty() && -q.top().first<a[i].l)//飞机已经离开 {id.push(-q.top().second);q.pop();}if(!id.empty())//还有廊桥可以分配 {cfa[-id.top()]++;q.push(make_pair(-a[i].r,-id.top()));id.pop();}}for(int i=1;i<=n;i++) cfa[i]+=cfa[i-1];while(!id.empty()) id.pop();while(!q.empty()) q.pop();//初始化 for(int i=1;i<=m2;i++) scanf("%d%d",&a[i].l,&a[i].r);sort(a+1,a+m2+1,comp);for(int i=1;i<=n;i++) id.push(-i);for(int i=1;i<=m2;i++){while(!q.empty() && -q.top().first<a[i].l) {id.push(-q.top().second);q.pop();}if(!id.empty()){cfb[-id.top()]++;q.push(make_pair(-a[i].r,-id.top()));id.pop();}}for(int i=1;i<=n;i++) cfb[i]+=cfb[i-1];int ans=0;for(int i=0;i<=n;i++) ans=max(ans,cfa[i]+cfb[n-i]);//枚举分配给国内国外多少时最大 cout<<ans;return 0;
}

CSP-S2021试题T1廊桥分配详讲相关推荐

  1. [2021 CSP-S提高组] 题解(廊桥分配+括号序列+回文+交通规划)

    2021 CSP-S 题解 廊桥分配 括号序列 回文 交通规划 配合

  2. spark on yarn 内存分配详解

    spark on yarn 内存分配详解

  3. CSP - J 2020 T1 优秀的拆分

    https://www.luogu.com.cn/problem/P7071 /* CSP - J 2020 T1 优秀的拆分 https://www.luogu.com.cn/problem/P70 ...

  4. TOEIC考试时间分配详解

    TOEIC考试时间分配详解 托业考试题全部为单项选择 涂答题卡 答错不扣分 除听力第二部分为3选1外其余皆为4选1 每一类题型前都会有详细的答题指引 考试时间 120分钟(45+75) 原始分换算为标 ...

  5. 【YOLOv5】正样本分配详解

    1.前言 YoloV5中loss由正样本和负样本两部分loss组成,负样本对应着图像的背景,如果负样本远多于正样本,则负样本会淹没正样本的损失,从而降低网络收敛的效率与检测精度.这就是目标检测中常见的 ...

  6. 幽暗的廊桥,热烈的遗梦:火了25年的中年“杰克苏”童话

    廊桥是一种有遮盖的桥梁.路人经过一段幽暗隐蔽的空间后,已身在彼岸. <廊桥遗梦>的作者罗伯特·詹姆斯·沃勒于2017年3月10日凌晨,在美国德克萨斯州弗雷德里克斯堡的家中去世,享年77岁. ...

  7. 【STM32】STM32标准库与HAL库对照学习教程一--使用寄存器操控LED闪烁详讲

    [STM32]STM32标准库与HAL库对照学习教程一--使用寄存器操控LED闪烁详讲 前言 本教程文章是我在学习STM32标准库和HAL库后写的,想通过标准库与HAL库的对照学习加强我对STM32的 ...

  8. 网络流题目详讲+题单(提高版)(持续更新中......)

    网络流题目详讲+题单(提高版)(持续更新中......) 标签:图论--网络流 PS:如果你觉得自己还不够强(和我一样弱),可以去入门版看看 阅读体验:https://zybuluo.com/Junl ...

  9. 黑猫带你学UFS协议第1篇:全网最全UFS协议中文详讲,这份学习框架图,你值得拥有!!!(持续更新中...)

    文/黑猫学长 1 作者想说 笔者本人从事于存储芯片行业多年,对eMMC/UFS/SD等芯片有深入研究,协议尤甚.而今看来,UFS协议在整个存储产品中(包括U盘.SPI.SD卡,NM卡.emmc.SSD ...

最新文章

  1. java cache system_Java Cache System JCS(一) 使用方法
  2. r语言必学的十个包肖凯_30 天学会R DAY 14:R语言必学包dplyr
  3. Java 基本数据类型
  4. PHP二维数组排序函数
  5. Linux unshare命名的一些例子
  6. 经常遇到的10大C语言基础算法(珍藏版源码)
  7. Mac OS X 10.10更新及体验
  8. 【ZOJ - 2955】Interesting Dart Game(背包,结论,裴蜀定理,数论)
  9. 判断是否是日期格式_Java8新特性之新世间与日期
  10. android浏览器插件开发,【转】Chrome扩展开发自己的浏览器插件
  11. plsql日期转换错ORA-01830
  12. 每日一题/010/微积分/极限/换元/取指数
  13. springcloud与springcloudalibaba版本对应关系
  14. WPF教程二:布局之StackPanel面板
  15. 学习区块链经典教程:区块链技术与应用
  16. Jcrop实现图片裁剪
  17. 360众测考核简单记录
  18. C语言/C++项目——黄金矿工
  19. 教你编写第一个生成式对抗网络GAN
  20. 实用教程:如何在电脑上安装安卓应用程序

热门文章

  1. 2015第19本:异类--不一样的成功启示录
  2. vue项目使用乐橙云播放 轻应用直播SDK imouplayer.js
  3. 深度思考:无关生智,局外生慧
  4. MACD是什么意思?炒股票新手入门如何用MACD金叉选股指标公式应对A股市场
  5. PS Photoshop CS6 界面介绍
  6. mac外接键盘右击键映射之karabiner
  7. matlab 地震正演程序,seismic-forward 地球物理勘探中,基础的地震波正演模拟程序,包括五个 (高阶中心差分 matlab 266万源代码下载- www.pudn.com...
  8. php laravel开发的个人博客源码分享,支持适配移动端附截图
  9. 一阶线性常微分方程解法总结 Summary of Solving First Order Linear Ordinary Differential Equation (ODE)
  10. docker安装jira