前言:这题太神了,蒟蒻表示思路完全断档,甚至想到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. Mac搭建svn服务器环境

    Mac搭建svn服务器环境 svn是Subversion的简称,是一个开放源代码的版本控制系统, Mac系统自带了svn的服务端和客户端功能, 因此不需要下载第三方软件,就可以支持svn进行版本的管控 ...

  2. 学习笔记三:基础篇Linux基础

    Linux基础 直接选择排序>快速排序>基数排序>归并排序 >堆排序>Shell排序>冒泡排序=冒泡排序2 =直接插入排序 一.Linux磁盘分区表示 Linux中 ...

  3. VirtualBox安装centos8

    原文链接:https://www.wjcms.net/archives/vagrantbox安装centos8 VirtualBox安装centos8 在线安装(不推荐) 打开git软件,直接运行命令 ...

  4. 如何在同一台电脑上部署多个tomcat实现多个tomcat在同一台电脑上同时启动

    有时候我们在开发的过程中难免会遇到需要在同一台电脑部署多个tomcat,且还要他们能够都单独同时启动不会对其他的tomcat造成影响 本文就简单记录一下,如何来实现这个骚操作 1. 下载tomcat的 ...

  5. java 面向对象(二十八):异常 一

    1. 异常的体系结构 * java.lang.Throwable * |-----java.lang.Error:一般不编写针对性的代码进行处理. * |-----java.lang.Exceptio ...

  6. linux专题(八):用户组管理

    http://dwz.date/UDf 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个 ...

  7. CRM开发系列

    CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环:新客户的 ...

  8. Lua-源码-字符串的resize函数-luaS_resize

    // 这里需要问一下:upval和一般的对象有什么区别?为什么要单独一个函数来处理? void luaC_linkupval (lua_State *L, UpVal *uv) { global_St ...

  9. 基于python的自动化测试框架搭建

    滴~ 今日打卡!   好多天没来打卡了.博主最近一直在把碎片化知识转化为知识体系的过程中挣扎.Python语言.selenium.unittest框架.HTMLTestRunner框架都有所了解,也写 ...

  10. 12C oracle 12.1.0.2版本打补丁

    从support  1454618.1文档 中可以下载到各版本的补丁和PSU. 此次采用的是28349311 版本号的psu 和28440711 版本号的jvm.opatch版本号6880880_12 ...