链接:

P7913


题意:

有 \(m_1\) 架飞机和 \(m_2\) 架飞机停在两个机场,每架飞机有到达和离开的时间,要将 \(n\) 个廊桥分给两个机场,每个廊桥同一时刻只能停一架飞机,需要最大化能够停在这 \(n\) 个廊桥的飞机数量。


分析:

一个容易想到的思路是算出每个机场有 \(i\) 个廊桥时能够停下的飞机数量,最后 \(O(n)\) 比较一遍。我们思考可以想到一个性质,就是对于每架飞机,它所能停靠的编号最小的廊桥是一定的,也就是说,不管分配了多少廊桥,每架飞机该在哪个廊桥停就一定会在哪个廊桥停,只是廊桥数量不足时会表现为停不了。

考虑一下会发现这个东西很对,所以我们先求出每架飞机所能停靠的编号最小的廊桥。

对于每架飞机,只需要找到当前空闲的廊桥中编号最小的,可以用一个优先队列维护。

同时还要维护停有飞机的廊桥,因为要维护一个飞机到达时哪些廊桥会变空,同样使用优先队列。


算法:

先把飞机按到达时间排序,然后用两个优先队列维护空着的廊桥和非空的廊桥,得到每个飞机所能停靠的编号最小的廊桥,然后做一个前缀和就能得到每个机场有 \(i\) 个廊桥时能够停下的飞机数量,最后得到答案。


代码:
#include<bits/stdc++.h>
using namespace std;
#define mkp make_pair
#define int long long
#define in read()
inline int read(){
int p=0,f=1;
char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){p=p*10+c-'0';c=getchar();}
return p*f;
}
const int N=1e5+5;
int n,m1,m2,ans1[N],ans2[N],ans;
struct plane{int x,y;}a[N],b[N];
bool cmp(plane x,plane y){return x.x<y.x;}
priority_queue<pair<int,int> >q;//非空
priority_queue<int>p;//空
signed main(){
freopen("airport.in","r",stdin);
freopen("airport.out","w",stdout);
n=in,m1=in,m2=in;
for(int i=1;i<=m1;i++)
a[i].x=in,a[i].y=in;
for(int i=1;i<=m2;i++)
b[i].x=in,b[i].y=in;
sort(a+1,a+1+m1,cmp);
sort(b+1,b+1+m2,cmp);
for(int i=1;i<=n;i++)p.push(-i);
for(int i=1;i<=m1;i++){
int s=a[i].x,t=a[i].y;
while(!q.empty()&&-q.top().first<s){p.push(-q.top().second);q.pop();}
if(!p.empty()){int tp=-p.top();q.push(mkp(-t,tp));ans1[tp]++;p.pop();}
}
while(!q.empty())q.pop();
while(!p.empty())p.pop();
for(int i=1;i<=n;i++)p.push(-i);
for(int i=1;i<=m2;i++){
int s=b[i].x,t=b[i].y;
while(!q.empty()&&-q.top().first<s){p.push(-q.top().second);q.pop();}
if(!p.empty()){int tp=-p.top();q.push(mkp(-t,tp));ans2[tp]++;p.pop();}
}
for(int i=1;i<=n;i++)
ans1[i]+=ans1[i-1],
ans2[i]+=ans2[i-1];
for(int i=0;i<=n;i++)
ans=max(ans,ans1[i]+ans2[n-i]);
cout<<ans;
return 0;
}

题外话:

不算很难,实现也很简单,可惜了

三分是错解,因为只有一个严格单增加一个严格单减才是单峰。要构造卡三分的数据非常简单。

[CSP-S2021] 廊桥分配的更多相关文章

  1. [CSP-S 2021] 廊桥分配 题解

    写篇题解来纪念我炸掉的CSP 唯一会做的题代码写挂了(痛苦面具 思路 我看到这道题第一眼想到的是线段树,感觉可以用线段树维护飞机入站到出战的这段时间,想了半天想不到代码怎么写. 国内机场与国外机场要分 ...

  2. csp-s 2021

    T1 廊桥分配 当一架飞机抵达机场时,可以停靠在航站楼旁的廊桥,也可以停靠在位于机场边缘的远机位. 乘客一般更期待停靠在廊桥,因为这样省去了坐摆渡车前往航站楼的周折. 然而,因为廊桥的数量有限,所以这 ...

  3. 【做题笔记】CSP-S 往年试题

    题单 本文章正在持续更新-- [2021] 廊桥分配 题目 题面描述 所有飞机分为两类--国内区和国际区,两区廊桥数量互不干扰.每架飞机遵循"先到先得"的原则,优先选择编号最小的廊 ...

  4. CSP-J/S 2021 游记

    \(\large\texttt{Day -1}\) 晚上好累啊,去集训了,回来之后发现十一点了还码了一会儿,只能祈求上帝明天不会打瞌睡. \(\large\texttt{Day 0}\) 意料中的事情 ...

  5. CSP 2021 总结

    CSP 2021 总结 PJ 开题顺序:1342 应该先做 T2 ,导致我 T2 直接看错 T1.T3 T1 :直接推规律即可,考场的想法应该正确 T3 :好家伙直接 map 走起 T2 最崩溃的来了 ...

  6. CSP-S游记

    第三次考csp-s了,希望这次不要二等 Day ?(初赛) 之前校内模拟赛平均下来都在班级中游,所以不求高分但是觉得过没问题(事实好像确实如此 先开题,选择题很水秒了(devinNB猜到了考Linux ...

  7. SAP成都研究院飞机哥:程序猿和飞机的不解之缘

    今天的文章来自Jerry的老同事张航. 张航和Jerry一样于2007年毕业后加入SAP成都研究院工作至今.进入SAP后的第一个开发部门是SAP Business by Design Infrastr ...

  8. CSP-S 2021 遗言

    感谢€€£,谢谢宁嘞! 第一题,€€£给了很多限制条件,什么"先到先得"."只有一个跑道",让它看起来很好做,然后来骗,来偷袭,广大"消费者" ...

  9. 【CSP模拟赛】Freda的迷宫(桥)

    题目描述 Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过.  黄昏 ...

随机推荐

  1. Java学习笔记--常用容器

    容器 1. 出现原因 解决程序运行时需要创建新对象,在程序运行前不知道运行的所需的对象数量甚至是类型的问题. Java中提供了一套集合类来解决这些问题包括:List.Set.Queue.Map 2. ...

  2. C# 下载远程http文件到本地

    System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog();   ...

  3. c++ 打包函数教程

    c++当要重复运行一些代码时可以打包一个函数 当没有返回值时用void打包函数: #include <iostream> #include <stdio.h> using na ...

  4. 最新版微软视窗(Windows)作业系统下载(2020-08-19)

    为了更好的使用WSL(Windows Subsystem For Linux),不得不用最新的windows 10 2004版了,这个版本的WSL已经是第二版了,即WSL2.下面给出下载地址 系统发布 ...

  5. supermvc 操作备要

    模板暂时仅支持smarty,需要指定模板文件   系统配置文件在supermvc文件夹下 sconfig.php 修改项目目录下的conf下的config.php 会覆盖系统默认配置   contro ...

  6. Docker 配置国内镜像加速器

    Docker 默认是从官方镜像地址 Docker Hub 下下载镜像,由于服务器在国外的缘故,导致经常下载速度非常慢.为了提升镜像的下载速度,我们可以手动配置国内镜像加速器,让下载速度飚起来. 国内的 ...

  7. sunny 内网穿透使用。

    启动方法:

  8. SpringSecurity系列学习(一):初识SpringSecurity

    SpringSecurity Spring Security是spring采用AOP思想,基于servlet过滤器实现的安全框架.它提供了完善的认证机制和方法级的 授权功能.是一款非常优秀的权限管理框 ...

  9. P7046-「MCOI-03」诗韵【SAM,倍增,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P7046 题目大意 给出一个长度为 \(n\) 的字符串,然后 \(m\) 次把它的一个子串加入集合.如果一个字符串 ...

  10. 牛客练习赛79E-小G的数学难题【dp,单调队列】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11169/E 题目大意 给出\(n\)个三元组\((a_i,b_i,c_i)\). 要求选出一个集合\(S\) ...