[杂题]:B/b(二分答案)
题目传送门(内部题53)
输入格式
第二行$2$个整数表示$n,m$。
接下来$m$行每行两个整数,描述一个点对$(x_i,y_i)$。
输出格式
一个整数,表示最短距离。
样例
样例输入:
6 2
1 5
2 6
样例输出:
1
数据范围与提示
样例解释:
最优方案是在$2$号节点和$5$号节点之间建边。
数据范围:
对于前$30\%$的数据:
$n,m\leqslant 500$
对于前$60\%$的数据:
$n,m\leqslant 2,000$
对于所有数据:
$1\leqslant n,m\leqslant 100,000$
$1\leqslant x_i\leqslant y_i\leqslant n$
题解
发现答案是满足单调性的,假设答案为$d$,那么比$d$小的一定都不行,比$d$大的一定都行。
所以我们考虑二分答案,如何$judge$呢?
正解我不会,于是我打的暴力,枚举端点和点对,然后疯狂简枝,下面列举一下剪枝:
$\alpha.$二分范围,所有点对取$\max$即可。
$\beta.$在枚举点队的时候,已经满足的不用考虑,所以我们每一次先扫一边,将还没有满足的点对提取出来。
$\gamma.$如果不满足的点对的右端点的最小值比左端点的小,那么也一定不行,直接$return\ 0$即可。
这三个剪枝一个也不能少。
时间复杂度:$\Theta(n^2\log n)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n,m;
int l[100001],r[100001],len[100001];
int que[100001];
bool judge(int x)
{
int minn=n,maxn=0,rmin=n,lft,rht;
que[0]=0;
for(int i=1;i<=m;i++)
if(x<len[i])
{
que[++que[0]]=i;
rmin=rmin<r[i]?rmin:r[i];
maxn=maxn>l[i]?maxn:l[i];
minn=minn<l[i]?minn:l[i];
}
if(!que[0])return 1;
if(rmin<=maxn)return 0;
for(int i=minn;i<=maxn;i++)
{
lft=0;
rht=n;
for(int j=1;j<=que[0];j++)
{
if(r[que[j]]>i)
{
int flag=x-abs(l[que[j]]-i);
lft=max(lft,r[que[j]]-flag);
rht=min(rht,r[que[j]]+flag);
if(lft>rht)goto nxt;
continue;
}
goto nxt;
}
return 1;
nxt:;
}
return 0;
}
int main()
{
scanf("%d%d",&n,&m);
int lft=0,rht=0;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&l[i],&r[i]);
len[i]=r[i]-l[i];
rht=rht>len[i]?rht:len[i];
}
while(lft<rht)
{
int mid=(lft+rht)>>1;
if(judge(mid))rht=mid;
else lft=mid+1;
}
printf("%d",lft);
return 0;
}
rp++
[杂题]:B/b(二分答案)的更多相关文章
- BZOJ_4590_[Shoi2015]自动刷题机_二分答案
BZOJ_4590_[Shoi2015]自动刷题机_二分答案 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题 ...
- BZOJ4590 SHOI2015自动刷题机(二分答案)
二分答案,分别往尽量小的和尽量大的二分即可. #include<iostream> #include<cstdio> #include<cmath> #includ ...
- Codeforces Round #402 (Div. 2) D题 【字符串二分答案+暴力】
D. String Game Little Nastya has a hobby, she likes to remove some letters from word, to obtain anot ...
- 【bzoj2653】【middle】【主席树+二分答案】
Description 一个长度为 n 的序列 a ,设其排过序之后为 b ,其中位数定义为 b[n/2] ,其中 a,b 从 0 开始标号 , 除法取下整. 给你一个长度为 n 的序列 s .回答 ...
- BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 1388 Solved: 860 [Submit][Stat ...
- 二分答案:Poweroj2461-入门基础之二分答案(二分法的应用)
传送门:点击打开链接 入门基础之二分答案 Time Limit: 1000 MS Memory Limit: 65536 KBTotal Submit: 179 Accepted: 33 Page V ...
- HDU 5884 Sort(二分答案+计算WPL的技巧)
Sort Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- LuoguP2115 [USACO14MAR]破坏Sabotage【二分答案】By cellur925
本来是想找一道生成树的题做的...结果被洛咕的标签骗到了这题...结果是二分答案与生成树一点mao关系都没有.... 题目大意:给你一个序列,请你删去某一个$l~r$区间的值($2<=i< ...
- [杂题]:C/c(二分答案)
题目传送门(内部题54) 输入格式 第一行一个整数表示$n$.第二行$n$个整数表示初始序列.(这行原题没有,是我加的)接下来$2n$行每行两个整数,分别表示$X_i,Y_i$.数据保证至少存在一种方 ...
随机推荐
- Cef 重写alert与confirm弹窗
在使用form内嵌cef浏览本地页面的时候,如果出现alert弹窗,会在标题栏显示页面所在目录.所以想起来重写alert的样式,通过MessageBox进行提示,或者自己写一个弹窗. 以下代码基于 3 ...
- mysql定时备份shell脚本
#!/bin/bash #每天早上4点, mysql备份数据 # backup.sh #crontab -e # * * * /home/erya/run/moniter/mysql_backup.s ...
- c#继承与构造函数的调用
1.实例化父类时,可以通过new子类来实例化父类,执行构造函数的顺序为:先执行父类的构造函数,再执行子类的构造函数. 2.实例化子类时,只可以new子类,执行顺序同上. 3.父类实例化后,只能执行父类 ...
- ECMAScript 2015 迭代器协议:实现自定义迭代器
迭代器协议定义了一种标准的方式来产生一个有限或无限序列的值,并且当所有的值都已经被迭代后,就会有一个默认的返回值. 当一个对象只有满足下述条件才会被认为是一个迭代器:它实现了一个 next() 的方法 ...
- c++内存布局与c程序的内存布局
c/c++的内存布局:堆,栈,自由存储区(与堆的区别),全局/静态存储区,常量存储区(字符串常量,const常量) http://www.cnblogs.com/QG-whz/p/5060894.ht ...
- 机器学习实战笔记-10-K均值聚类
K-均值聚类 优点:易实现.缺点:可能收敛到局部最小值,大规模数据集上收敛较慢:适用于数值型数据. K-均值聚类(找到给定数据集的k个簇) 算法流程 伪代码: 创建k个点作为起始质心(经常是随机选择) ...
- Recurrent Neural Network(3):LSTM Basics and 《Inside Out》
下图是Naive RNN的Recurrent Unit示意图,可以看到,在每个时间点t,Recurrent Unit会输出一个隐藏状态ht,对ht加工提取后将产生t时刻的输出yt.而在下一个时间节点t ...
- Eclipse常见版本和JDK常用版本对应关系
Luna 4.4 JDK1.6Mars 4.5 JDK1.7 Neon 4.6 JDK1.8Oxygen 4.7 JDK1.8Photon 4.8 2019年3月
- Flutter 仿滴滴出行App
绿色出行 Flutter 仿滴滴出行App 地图:采用高德地图,仅简单完成了部分功能,基础地图,地址检索,逆地理编码. 界面:仿滴滴主界面,地图中心请求动效果,服务tabs展开效果,地址检索界面,城市 ...
- What is one-hot?
SEO: libtorch 如何 OneHot ? torch OneHot 源代码 ? https://www.tensorflow.org/api_docs/python/tf/one_hot 最 ...