#P3641. [APIO2016] 最大差分
[APIO2016] 最大差分
题目背景
评测方式
以下是本题评测方式,与题面不符时以这里为准。
你的代码中不应该包含 gap.h
库。
你的代码中需如下进行 findGap
和 MinMax
函数的声明:
extern "C" void MinMax(long long,long long,long long*,long long*);
extern "C" long long findGap(int,int);
不保证没锅,要是有锅请私信供题人然后 D 死他。
题目描述
有 个严格递增的非负整数 ()。你需要找出 ()里的最大的值。
你的程序不能直接读入这个整数序列,但是你可以通过给定的函数来查询该序列的信息。关于查询函数的细节,请根据你所使用的语言,参考下面的实现细节部分。
你需要实现一个函数,该函数返回 ()中的最大值。
实现细节
本题只支持 C++(包括 cpp11,cpp14,cpp17)。
C/C++
你需要包含头文件 gap.h
。
你需要实现一个函数 findGap(T, N)
,该函数接受下面的参数,并返回一个 long long
类型的整数:
- :子任务的编号( 或者 )
- :序列的长度
你的函数 findGap
可以调用系统提供的查询函数 MinMax(s, t, &mn, &mx)
,该函数的前两个参数 和 是 long long
类型的整数,后两个参数 &mn
和 &mx
是 long long
类型的整数的指针(mn
和 mx
是 long long
类型的整数)。当 MinMax(s, t, &mn, &mx)
返回时,变量 mn
将会存储满足 中 的最小值,变量 mx
将会存储满足 , 的最大值。如果区间 中没有序列中的数,则 mn
和 mx
都将存储 。在查询时需要满足 ,否则程序将会终止,该测试点计为 分。
Pascal
你需要使用单元 graderhelperlib
。
你需要实现一个函数 findGap(T, N)
,该函数接受下面的参数,并返回一个 Int64
类型的整数:
- :子任务的编号( 或者 )(
Integer
类型) - :序列的长度(
LongInt
类型)
你的函数 findGap
可以调用系统提供的查询函数 MinMax(s, t, mn, mx)
,该函数的前两个参数 和 是 Int64
类型的整数,后两个参数 mn
和 mx
是传引用方式的 Int64
类型的整数(过程内部对这两个变量的修改会影响到外部的对应变量的值)。当 MinMax(s, t, mn, mx)
执行完毕时,变量 mn
将会存储满足 中 的最小值,变量 mx
将会存储满足 , 的最大值。如果区间 中没有序列中的数,则 mn
和 mx
都将存储 。在查询时需要满足 ,否则程序将会终止,该测试点计为 分。
输入格式
样例一
C/C++
考虑 。
则答案应该是 ,可以通过下面的几组对 MinMax
的询问获得:
调用 MinMax(1, 2, &mn, &mx)
,则 mn
和 mx
皆返回 。
调用 MinMax(3, 7, &mn, &mx)
,则 mn
返回 ,mx
返回 。
调用 MinMax(8, 9, &mn, &mx)
,则 mn
和 mx
皆返回 。
Pascal
考虑 。
则答案应该是 ,可以通过下面的几组对 MinMax
的询问获得:
调用 MinMax(1, 2, mn, mx)
,则 mn
和 mx
皆返回 。
调用 MinMax(3, 7, mn, mx)
,则 mn
返回 ,mx
返回 。
调用 MinMax(8, 9, mn, mx)
,则 mn
和 mx
皆返回 。
样例评测方式
样例测评系统从标准输入中读入两行。第一行包含两个整数,子任务编号 ,和序列长度 。第二行包含 个严格递增的非负整数。然后该程序会向标准输出中写入两行,第一行为 findGap
的返回值,第二行为花费 的值。
下面的输入描述了上面的样例:
2 4
2 3 6 8
注意实际使用的交互库和 spj 对数据进行了加密。
提示
限制与约定
对于所有的测试点,有 。
每一个测试点开始测试之前, 都将被初始化为 。
子任务 1( 分):每一次调用 MinMax
都将使 加 。为了获得所有分数,需要满足对于该子任务下的所有测试点,都有 。
子任务 2( 分):定义 为调用 MinMax
时,区间 中的序列中数的数量。每次调用 MinMax
,将使 加上 。对于每一个测试点,如果 ,你将得到 70 分,否则将得到 分。你的该子任务的得分是其下所有测试点中的最低分。