#W2002. 寻找边界

寻找边界

写在前面

这是一道来自POJ的题,这个OJ是北大的垃圾OJ,采用的应该是C++99老系统,不能使用nullptr,string不能使用==判断相等,泛型省略也是不可以的,做题时请多加注意,防止出现CE,并且如果 C++ 无法通过而你认为没有问题请选择 G++ 提交。

题目描述

最有可能来自地球外的信号已经被美国航空航天局接收并数字化(他们一定是在挑衅:“我想用英尺,而不是米!”)。每个信号似乎分为两部分:一个由 nn 个整数组成的序列和一个非负整数 tt 。我们不准备详细讨论,但研究人员发现,一个信号编码两个整数,代表序列子范围的下限和上限,其和的绝对值最接近于 tt

现在给你包含 nn 个整数的序列和非负值 tt 。你需要找到序列的非空范围(比如连续子序列),并输出其下限 ll 和上限 uu 。从第 ll 个元素到第 uu 个元素(包括边界)的元素和的绝对值必须至少与任何其他非空范围和的绝对值一样接近 tt

输入格式

输入包含多组测试用例,以0 0结尾。每组测试用例,包括三行,第一行为两个正整数 nnkk1n,k1051 \leq n,k \leq 10^5。第二行包括 nn 个正整数,即该序列。第三行包含 kk 个询问 tt (1t109)(1 \leq t \leq 10^9)

输出格式

对于每个询问输出一行三个整数,最接近的和以及上下界下标,注意下标从 11 开始。

5 1
-10 -5 0 5 10
3
10 2
-9 8 -7 6 -5 4 -3 2 -1 0
5 11
15 2
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
15 100
0 0
5 4 4
5 2 8
9 1 1
15 1 15
15 1 15