前言:这题太神了,蒟蒻表示思路完全断档,甚至想到DP。得到大佬hs-black的帮助后才AC此题orz

---------------------------------

题目描述

ck love…… what?

Long before,某个巷口的拐角处,有个咖啡厅,那咖啡厅真是:北通巫峡,南极潇湘,不知其几千里也。

“等到了一千年以后~~”,3013年,ck想起那拐角咖啡厅,甚是思念。于是,他在北冥之处也开了家咖啡厅,取名叫“平角咖啡厅”。既然是平角,就不会拐弯,那么我们可以把他的摊位置于一数轴上。ck富可敌国,坐拥n个服务员,这些服务员的当前位置在数轴上分别表示为:h1,h2,h3...hn.这天,他遇到一个棘手的事情,领导“兰斯朵蕾”来抽查,ck和他的小服务员们被要求在最短的时间内接待完最后一批顾客。最后这批顾客有m个人,他们对应站在数轴位置p1,p2,p3...pm。由于是31st century,顾客们都很懒,他们只会呆在原地接受招待。因此,服务员都是在数轴上的“移动靶”,他们每秒钟可以原地不动,或者向左或向右一个单位长度,而服务员们的手速是极快的,因此不用计算招待的时间。What‘s more,一个顾客可以被多个服务员招待。现在,为了尽快得到领导的认可,为了尽快得到老板娘的拥抱,你是不是该主动帮ck算算,他的服务员最快能在几秒后完成“每个顾客都至少被招待一次”的任务,从而听取“兰斯道瑞”领导的训话以及接受老板娘的拥抱呢?(不妨假设一结束招待就可以面见兰斯道瑞并和老板娘拥抱。)

ck love……what?Music, of course!!咖啡厅的音乐是必不可少的,“音乐小丸子”ck,和老板娘又对唱了一首:“爱转角遇见了谁,是否有爱情的美,爱转角以后的街,能不能由我来陪~~~……”

输入格式

第一行,两个正整数n,m

第二行,n个互不相同的正整数,h1,h2,h3.....hn

第三行,m个互不相同的正整数,p1,p2.p3....pm

含义都如题目所述。At the same time,由于Lzl蒟蒟蒻非常mercy,所以,h和p都从小到大排好了序(此处应该有掌声!!)

输出格式

仅一个数,即为所求的答案。

------------------------------------------

二分最少用的时间。在$check$函数中,我们设置$last$表示上个服务员不能满足的顾客的位置。假设当前服务员为$i$,顾客为$j$,整体思路就是从$last$开始,一直到顾客$j$,看$i$能否满足要求,如果满足就$j--$;不满足则更新$last$的位置,$i--$。

注意一个细节:注意$i$的位置与$j$的位置还有$last$的位置距离的大小关系。写起来就是:

$if\ (min(abs(h[i]-p[last]),abs(h[i]-p[j]))+abs(p[last]-p[j])<=x)\ j--$

时间复杂度$O(n\log n)$

代码:

//二分  O(nlogn)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,h[],p[];
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if (ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=x* +ch-'';ch=getchar();}
return x*f;
}
int check(int x)
{
int i=n,j=m,last=m;
while(i>&&j>)
{
if (min(abs(h[i]-p[last]),abs(h[i]-p[j]))+abs(p[last]-p[j])<=x) j--;
else last=j,i--;
}
if (j>) return ;
else return ;
}
int work()
{
int l=,r=1e10;
while(l<=r)
{
int mid=(l+r)>>;
if (check(mid)) r=mid-;
else l=mid+;
}
return l;
}
signed main()
{
n=read(),m=read();
for (int i=;i<=n;i++) h[i]=read();
for (int i=;i<=m;i++) p[i]=read();
cout<<work();
return ;
}

【FZYZOJ】珂神不等式&平角咖啡厅 题解(二分答案)的更多相关文章

  1. luoguP2680 运输计划 题解(二分答案+树上差分)

    P2680 运输计划  题目 这道题如果是看的我的树上差分来的,那么肯定一看题目就可以想到树上差分. 至于这是怎么想到的,一步一步来: 1.n有300000,不可能暴力枚举每一条边 2.因为我们要使运 ...

  2. 洛谷P3957 跳房子 题解 二分答案/DP/RMQ

    题目链接:https://www.luogu.org/problem/P3957 这道题目我用到了如下算法: 线段树求区间最大值: 二分答案: DP求每一次枚举答案g时是否能够找到 \(\ge k\) ...

  3. 【bzoj4326】[NOIP2015]运输计划 二分答案+LCA

    题目描述 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该 ...

  4. BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)

    字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...

  5. POJ 3273 Monthly Expense 【二分答案】

    题意:给出n天的花费,需要将这n天的花费分成m组,使得每份的和尽量小,求出这个最小的和 看题目看了好久不懂题意,最后还是看了题解 二分答案,上界为这n天花费的总和,下界为这n天里面花费最多的那一天 如 ...

  6. luoguP1419 寻找段落(二分答案+单调队列)

    题意 给定一个长度为n的序列a1~an,从中选取一段长度在s到t之间的连续一段使其平均值最大.(n<=100000) 题解 二分答案平均值. judge时把每一个a[i]-mid得到b[i] 在 ...

  7. CF85E Guard Towers(二分答案+二分图)

    题意 已知 N 座塔的坐标,N≤5000 把它们分成两组,使得同组内的两座塔的曼哈顿距离最大值最小 在此前提下求出有多少种分组方案 mod 109+7 题解 二分答案 mid 曼哈顿距离 >mi ...

  8. 【题解】 [HEOI2016]排序题解 (二分答案,线段树)

    题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行 ...

  9. HDU 6070题解(二分+线段树)

    题面 传送门 此题的题意不是很清晰,要注意的一点是在区间[L,R]中,默认题目编号最后一次出现的时候是AC的 比如1 2 1 2 3 ,在区间[1,4]中,第3次提交时AC第1题,第4次提交时AC第2 ...

随机推荐

  1. Django---进阶5

    目录 单表操作 必知必会13条 测试脚本 查看内部sql语句的方式 神奇的双下划线查询 一对多外键增删改查 多对多外键增删改查 正反向的概念 多表查询 子查询(基于对象的跨表查询) 联表查询(基于双下 ...

  2. day77 作业

    目录 一.完成todolist案例 二.商品页面 一.完成todolist案例 <!DOCTYPE html> <html lang="en"> <h ...

  3. day09 基本数据类型(中)

    目录 一 列表(list) 1.作用 2.定义 3.类型转化 4.内置方法 4.1按索引取值 4.2切片 4.3长度 4.4成员运算 4.5往列表中加值 4.5.1追加 4.5.2追加列表 4.5.3 ...

  4. 安装FeedReader添加RSS订阅

    #0x1 FeedReader FeedReader是一款功能齐全,界面优美的GTK+ 3RSS阅读器客户端,用于在线RSS服务. FeedReader目前支持Feedbin,Feedly,Fresh ...

  5. 06 Vue生命周期钩子

    生命周期钩子 表示一个vue实例从创建到销毁的这个过程,将这个过程的一些时间节点赋予了对应的钩子函数 钩子函数: 满足特点条件被回调的方法 new Vue({ el: "#app" ...

  6. 数据可视化实例(七): 计数图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter5/chapter5 计数图 (Counts Plot) 避免点重叠问题的另一个选择是增加点的大小,这取 ...

  7. Swift开发笔记

    Swift开发笔记(一) 刚开始接触XCode时,整个操作逻辑与Android Studio.Visual Studio等是完全不同的,因此本文围绕IOS中控件的设置.事件的注册来简单的了解IOS开发 ...

  8. koa中是如何封装获取客户端IP的?

    案例 var koa = require('koa') var app = new koa() app.use(function (ctx,next) { ctx.body = ctx.ip }) a ...

  9. 线性dp 之 奶牛渡河

    题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...

  10. CSS过渡时间

    CSS过渡时间 基础知识 在了解CSS过渡时间之前,你应该先了解一下CSS的变形动画,可以参考之前的一篇博客. 我们的元素在属性发生变化时,如果没有特地的为它设置过渡时间,整个变化过程其实是以毫秒级别 ...