题目:UOJ#206。

题目大意:由于过于冗长,不好解释,所以详见原题。

解题思路:这是一道交互题。

对于第一问,很容易解决。由于数列严格递增,所以不会出现相等的情况。

首先调用MinMax(0,10^18,&l,&r)求出最小值和最大值,然后每次调用MinMax(l+1,r-1,&l,&r)求出次大值、次小值,第三大值、第三小值……

如此调用$\lfloor \frac{N+1}{2}\rfloor$次,就可以求出整个数组。然后求值即可。

对于第二问,首先仍然是求出最小值min和最大值max。

然后,可以知道[min,max]之间还有N-2个数,那么中间就被分为了N-1份。

根据抽屉原理可知,两数之间的最大间隔至少为$\lceil \frac{a_N - a_1}{N-1}\rceil$,设其为p。

那么我们就将查找区间分为N-1份,每次查找的区间大小都为p(最后一个区间除外),然后每次用当前查询到的最小值减去上次查询到的最大值(跳过-1),得出的答案进行比较,最大的那个就是答案。

由于最大间隔至少为p,所以最大间隔一定在两个不同区间中,因此这样做能得到正确的答案。

m的值:第一次调用N+1,之后N-1次调用,总共包含不超过N个点,所以$m\leq N+1+N+N-1$,即$m\leq 3N$,符合条件。

然后即可AC。

C++ Code:

#include"gap.h"
#define ll long long
ll p[100005];
ll findGap(int T,int N){
if(T==1){
int l=1,r=N;
ll LL=0,RR=1000000000000000000;
while(l<=r){
ll xx,yy;
MinMax(LL,RR,&xx,&yy);
p[l++]=xx,p[r--]=yy;
LL=xx+1,RR=yy-1;
}
ll max=0;
for(int i=1;i<N;++i)
if(p[i+1]-p[i]>max)max=p[i+1]-p[i];
return max;
}else{
ll xx,yy;
MinMax(0,1000000000000000000,&xx,&yy);
ll k=(yy-xx)/(N-1);
if((yy-xx)%(N-1))++k;
ll prer=xx,max=0,nowl,nowr;
for(ll l=xx+1;l<yy;l+=k){
ll r=l+k-1;
if(r>yy)r=yy-1;
MinMax(l,r,&nowl,&nowr);
if(nowl-prer>max)max=nowl-prer;
if(nowr!=-1)
prer=nowr;
}
if(yy-prer>max)max=yy-prer;
return max;
}
}

[APIO2016]Gap的更多相关文章

  1. [APIO2016]Gap(交互)

    第一个subtask应该还是很送分的,就是每次询问两端值的大小,(N+1)/2次即可. 考虑第二个subtask,首先还是先把最小值和最大值询问出来,然后发现不需要询问每一个数,直接将[l+1,r-1 ...

  2. UOJ #206. 【APIO2016】Gap

    Description Solution 第一个子任务,直接从 \((a[i],a[j])\) 推出 \((a[i+1],a[j-1])\) 就行了,只需要 \(\frac{N+1}{2}\) 第二个 ...

  3. UOJ#206. 【APIO2016】Gap 构造 交互题

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ206.html 题解 T = 1 的情况直接大力从两边向中间询问即可. T = 2 的情况挺妙的,我没想到. 考虑首先花费 ...

  4. UOJ#206. 【APIO2016】Gap(交互,乱搞)

    描述 提交 自定义测试 有 NN 个严格递增的非负整数 a1,a2,…,aNa1,a2,…,aN(0≤a1<a2<⋯<aN≤10180≤a1<a2<⋯<aN≤101 ...

  5. 【APIO2016】Gap

    题目描述 有 $N$ 个严格递增的非负整数 $a_1, a_2, \dots, a_N$($0 \leq a_1 < a_2 < \cdots < a_N \leq 10^{18}$ ...

  6. UOJ #206. 【APIO2016】Gap【交互题】

    参考:https://blog.csdn.net/clover_hxy/article/details/70767653 人生第一次交互题...不是很难但是思维和传统题差别挺大的(以及并不会本地测试= ...

  7. DG gap sequence修复一例

    环境:Oracle 11.2.0.4 DG 故障现象: 客户在备库告警日志中发现GAP sequence提示信息: Mon Nov 21 09:53:29 2016 Media Recovery Wa ...

  8. 16 On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima 1609.04836v1

    Nitish Shirish Keskar, Dheevatsa Mudigere, Jorge Nocedal, Mikhail Smelyanskiy, Ping Tak Peter Tang N ...

  9. 利用增量备份恢复因归档丢失造成的DG gap

    故障现象:data guard归档出现gap,悲剧的是丢失的归档在主库上被rman备份时删除了,丢失的归档大约有20几个,数据库大小约2T,如果重建DG将非常耗时间,因此决定利用增量备份的方式恢复DG ...

随机推荐

  1. 3ds Max制作欧式风格的墙壁路灯效果

    在这篇文章中,我将解释我创建我的形象元宵节的步骤.我只是在寻找一个很好的参考图像在互联网上的东西,我觉得我想要的模型,这个形象.我发现了一个巨大的灯笼形象,但在白天的图片拍摄.我想改变我的形象和显示的 ...

  2. LeetCode Golang 7. 整数反转

    7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. Tips : Math包给出的类型大小的边界: // Integer limit values. const ...

  3. Linux网络配置、文件及命令

    Linux的网络配置是曾一直是我学习Linux的埋骨之地,投入了大量的精力和心神但是自己的虚拟机就是联不了网.原来一个大意,我一躺就是一年半.在这里简单的谈谈我对网络的微微认识. VMware的联网模 ...

  4. node——文件写入,文件读取

    ru //实行文件操作 //文件写入 //1.加载文件操作,fs模块 var fs = require('fs'); //2.实现文件写入操作 var msg='Hello world'; //调用f ...

  5. Vue学习之路第四篇:v-html指令

    上一篇我们讲解了两种方式,把Vue对象的数据展示在页面上: 1.插值表达式 2.v-text指令 但是如果我们展示的数据包含元素标签或者样式,我们想展示标签或样式所定义的属性作用,该怎么进行渲染,比如 ...

  6. HDU-2844 Coins 多重背包 物品数量二进制优化

    题目链接:https://cn.vjudge.net/problem/HDU-2844 题意 给你一些不同价值和一定数量n的硬币. 求用这些硬币可以组合成价值在[1 , m]之间的有多少. 思路 多重 ...

  7. jquery 将函数作为参数传递

    等待执行函数 这是自己封装的layui的询问框 //------[询问框](parameter:执行函数的参数,f_name:执行函数,msg:提示,time:自动消失时间,btn_arr:按钮组,o ...

  8. Django - 表与ORM操作

    Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...

  9. thinkphp 多个字段的不同关系的查询条件实现 .

    tp的$map不同条件默认是 and ,如果要用or<><><><>如下 例如查询Stu表中年龄大于18,或者身高低于180cm的男性(1为男性),(例 ...

  10. 数据结构实现(四)二叉查找树java实现

    转载 http://www.cnblogs.com/CherishFX/p/4625382.html 二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树 ...