#Libre2569. 「APIO2016」最大差分
「APIO2016」最大差分
题目描述
有 个严格递增的非负整数 ()。你需要找出 ()里最大的值。
你的程序不能直接读入这个整数序列,但是你可以通过给定的函数来查询该序列的信息。关 于查询函数的细节,请根据你所使用的语言,参考下面的实现细节部分。
你需要实现一个函数,该函数返回 ()中的最大值。
实现细节( C/C++ )
你需要实现一个函数 findGap(T, N) ,该函数接受下面的参数,并返回一个 long long 类型的整数:
T:子任务的编号(1或者2)N:序列的长度
你的函数 findGap 可以调用系统提供的查询函数 MinMax(s, t, &mn, &mx) ,该函数的前两个参数 s 和 t 是 long long 类型的整数,后两个参数 &mn 和 &mx 是 long long 类型的整数的指针( mn 和 mx 是 long long 类型的整数)。当 MinMax(s, t, &mn, &mx) 返回时,变量 mn 将会存储满足 的 的最小值,变量 mx 将会存储满足 的 的最大值。如果不存在 ,则 mn 和 mx 都将存储 。在查询时需要满足 ,否则程序将会终止,该测试点计为 分。
实现细节( Pascal )
你需要实现一个函数 findGap(T, N) 该函数接受下面的参数,并返回一个 Int64 类型的整数:
T:子任务的编号(1或者2)(Integer类型)N:序列的长度(LongInt类型)
你的函数 findGap 可以调用系统提供的查询过程 MinMax(s, t, mn, mx) ,该过程的前两个参数 s 和 t 是 Int64 类型的整数,后两个参数 mn 和 mx 是传引用方式的 Int64 类型的整数(过程内部对这两个变量的修改会影响到外部的对应变量的值)。当 MinMax(s, t, mn, mx) 执行完毕时,变量 mn 将会存储满足 的 的最小值,变量 mx 将会存储满足 的 的最大值。如果不存在 ,则 mn 和 mx 都将存储 。在查询时需要满足 ,否则程序将会终止,该测试点计为 分。
实现细节(所有语言)
为了得到每个测试点的分数,除了需要满足标准的需求外(时间和空间限制,没有运行错误等),你的程序还需要满足下面两个要求:
- 你的函数
findGap必须返回正确的答案。 - 花费的代价 不能超出给定的限制(关于 的定义参考得分部分)。
由于 LOJ 上通过标准输入输出与选手进行交互,因此需要将查询过程转化为输出 ? s t,其中 的意义与函数中意义相同,然后从标准输入中读入两个数,第一个为 ,第二个为 。若要输出答案,格式为 ! ans。交互器首先会提供 。
样例
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皆返回 。
数据范围与提示
对所有的测试点,有 。
每一个测试点开始测试之前, 都将初始化为 。
子任务 1(30 分):每一次调用 MinMax 都将使 加 。为了获得所有分数,需要满足:对于该子任务下的所有测试点,都有 。
子任务 2(70 分):定义 为调用 MinMax 时,区间 中的序列中数的数量。每次调用 MinMax,将使 加上 。对于每一个测试点,如果 ,你将得到 分,否则将得到 分。你的该子任务的得分是其下所有测试点中的最低分。