Description

题库链接

给你一个长度为 \(N\) 的单调递增序列 \(A\) 。交互时允许你调用 MinMax(s, t, &mn, &mx) 函数,表示序列元素的值在 \([s,t]\) 范围内最小为 mn ,最大为 mx 。求

\[\max_{1\leq i< n}A_{i+1}-A_i\]

\(1\leq n\leq 100000,0\leq a_i \leq 10^{18}\)

Solution

对于第一个子任务,由于单调递增的性质,显然我们可以用双指针从两端扫一遍。每次将查询范围缩小,查询次数是 \(\left\lceil\frac{N}{2}\right\rceil\) 的。

对于第二个子任务,由于每一次查询的代价是数的个数 \(+1\) ,比较容易想到的就是每个数只能被查询一次。实质上我们每次查询只在乎差值,而不在乎数值具体是多少,所以我们可以将答案作为间隔去查询,可能这个间隔内有很多数,但都不影响,因为其中间隔肯定小于答案,我们在乎的只是这次查询的最小值和上次有效查询的最大值的差值,是否能更新答案。

Code

#include "gap.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 100000+5;
const long long inf = 1ll*1000000000*1000000000; long long a[N]; long long findGap(int T, int N)
{
if (T == 1) {
long long mn = 0-1, mx = inf+1;
for (int l = 1, r = N; l <= r; l++, r--) {
MinMax(mn+1, mx-1, &mn, &mx);
a[l] = mn, a[r] = mx;
}
long long ans = 0;
for (int i = 1; i < N; i++) ans = max(ans, a[i+1]-a[i]);
return ans;
}else {
long long mn, mx, pre = -1, ans, now, lim;
MinMax(0, inf, &mn, &mx); lim = mx, now = mn, ans = (mx-mn+N-2)/(N-1);
while (now <= lim) {
MinMax(now, now+ans, &mn, &mx);
now = now+ans+1;
if (pre != -1 && mn != -1) ans = max(ans, mn-pre);
if (mx != -1) pre = mx;
}
return ans;
}
}

[APIO 2016]Gap的更多相关文章

  1. 【UOJ #206】【APIO 2016】Gap

    http://uoj.ac/problem/206 对于T=1,直接从两端往中间跳可以遍历所有的点. 对于T=2,先求出最小值a和最大值b,由鸽巢原理,答案一定不小于\(\frac{b-a}{N-1} ...

  2. GDOI 2016 & APIO 2016 游记

    缓慢施工中...... UPD:APIO游记已烂尾......因为Cu滚粗+生病一直没心情写..过了几天就发现APIO的事都快忘光了...去看KPM的就可以啦 今年apio竟然没和gdoi撞...智障 ...

  3. APIO 2016

    我好菜啊都不会 T1.boats 题目大意:给你N段区间,按顺序决定每段区间可以选一个数或不选,若选则选的这个数必须大于所有在这之前选的数,求有多少种方案.(N<=500,区间在[1,1e9]范 ...

  4. 【UOJ #205】【APIO 2016】Fireworks

    http://uoj.ac/problem/205 好神的题啊. dp[i][j]表示以i为根的子树调整成长度j需要的最小代价. 首先要观察到dp值是一个下凸壳. 因为从儿子合并到父亲时要把所有儿子的 ...

  5. 【UOJ #204】【APIO 2016】Boat

    http://uoj.ac/problem/204 肯定要离散化的,先离散化出\(O(n)\)个取值区间. 设\(f(i,j)\)表示第\(i\)所学校派出的划艇数量在\(j\)区间中. \(f(i, ...

  6. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  7. Generative Adversarial Nets[content]

    0. Introduction 基于纳什平衡,零和游戏,最大最小策略等角度来作为GAN的引言 1. GAN GAN开山之作 图1.1 GAN的判别器和生成器的结构图及loss 2. Condition ...

  8. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  9. DG gap sequence修复一例

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

随机推荐

  1. 和sin有关的代码

    include include using namespace std; const double TINY_VALUE=1e-10; double tsin(double x) { double g ...

  2. 听翁恺老师mooc笔记(12)--结构中的结构

    结构数组: 和C语言中的int,double一样,一旦我们做出一个结构类型,就可以定义这个结构类型的变量,也可以定义这个结构类型的数组.比如下面这个例子: struct date dates[100] ...

  3. TED - How To Get Better At The Things You Care About

    TED01 - How To Get Better At The Things You Care About 昨天我发布了攻克英语口语的宣言,今天就行动.TED是我们学习口语的好地方,本着学以致用的原 ...

  4. 2017-2018-1 我爱学Java 第一周 作业

    构建之法 成员及分工 内容简介 作者简介 分章学习及问题 第一章 概论 第二章 个人技术和流程 第三章 软件工程师的成长 第四章 两人合作 第五章 团队和流程 第六章 敏捷流程 第七章 实战中的软件工 ...

  5. verilog学习笔记(1)_两个小module

    第一个小module-ex_module module ex_module( input wire sclk,//声明模块的时候input变量一定是wire变量 input wire rst_n,// ...

  6. HTML5的新的结构元素介绍

    HTML5的新的结构元素介绍 一.HTML5与HTML4的区别 1. 取消了一些过时的HTML4的标签 其中包括纯粹显示效果的标记,如<font>和<center>,它们已经被 ...

  7. JAVA的循环控制与循环嵌套

    循环控制和循环嵌套 循环控制是除了循环条件之外,控制循环是否进行的一个机制,这给处理循环问题带来了灵活性.循环体内的语句块可以是顺序执行的语句,可以是分支结构的语句,也可以是循环语句,循环中含循环,就 ...

  8. slf4j 与 log4j2 实战讲解与日志分割

    这两天搭建项目的时候用到log4j2在这里把自己的问题与了解拿出来与大家分享一下. 1.为什我要用 因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见几种日志系统,而使用l ...

  9. python小练习之一

    下面的练习本身不难,比如打印1到10,计算1+2+3+...+100 ,最后一个是计算 1-2+3-4...-100 用了类的方法实现 用了列表生成器 用"高级"一丢丢的写法来实现 ...

  10. java的<<左移,>>右移,>>>无符号右移

    >>右移 右移,道在二进制中,假设用一个32位的Int表示一个64,那么高位就都是0,所以当我们把整个二进制数右移,如0100000 >> 2 = 0001000,可以看到右移 ...