[IOI2013]robots 机器人
思路
简单题,设函数
所以我们可以考虑二分。
设我们当前二分到
我们先扫
接下来扫
代码
#include<bits/stdc++.h>
using namespace std;
int const N=1e6+10;
int x[N],y[N],w[N],s[N],n,m,t;
struct node{int w,s;}a[N];
inline bool cmp(node x,node y){return x.w<y.w;}
inline bool check(int lim){
priority_queue<int>q;
int r=0;
for (int i=1;i<=n;++i){
while (a[r+1].w<=x[i] && r+1<=t) q.push(a[++r].s);
int xx=lim;
while (!q.empty() && xx--) q.pop();
}
while (r<t) q.push(a[++r].s);
for (int i=1;i<=m;++i){
if (q.empty()) break;
if (q.top()>y[i]) return 0;
int xx=lim;
while (!q.empty() && xx--) q.pop();
}
if (!q.empty()) return 0;
return 1;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m>>t;
for (int i=1;i<=n;++i) cin>>x[i],--x[i];sort(x+1,x+n+1);
for (int i=1;i<=m;++i) cin>>y[i],--y[i];sort(y+1,y+m+1);reverse(y+1,y+m+1);
for (int i=1;i<=t;++i) cin>>a[i].w>>a[i].s;sort(a+1,a+t+1,cmp);
int l=0,r=1e9;
while (l<r){
int mid=(l+r)>>1;
if (check(mid)) r=mid;
else l=mid+1;
}
if (l==1e9) l=-1;
cout<<l<<'\n';
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现