#P2566. Bound Found

    ID: 1567 传统题 1000ms 256MiB 尝试: 6 已通过: 1 难度: 10 上传者: 标签>数据结构前缀和其他二分查找Ulm Local 2001

Bound Found

中文题面:

描述

美国宇航局(目前似乎正处于叛逆期:"我就要用英尺,不要米!")接收并数字化了一系列大概率来自地外文明的信号。

每个信号由两部分组成:一个包含nn个整数值的序列和一个非负整数tt

具体细节暂不赘述,但研究人员发现,每个信号实际编码了两个整数值,这两个值对应序列中某个连续子序列的和的绝对值最接近tt时的子序列起始和结束位置。

输入要给定一个包含nn个整数的序列和一个非负目标值tt

输出要找出一个非空连续子序列(即序列的连续子区间),输出其起始索引ll和结束索引uu

要求该子序列(从第ll个元素到第uu个元素,包含两端)的绝对和值与tt的接近程度不劣于任何其他非空连续子序列的绝对和值与tt的接近程度。

连续子序列(continuous subsequence)指序列中相邻元素的连续区间,例如序列[a,b,c,d][a,b,c,d]中的[b,c][b,c]

"绝对和值最接近tt"的数学含义为:在所有可能的非空子序列中,满足sum|sum|tt的差值最小。

若存在多个满足条件的子序列,通常需输出索引范围最小的(或根据题目隐含规则选择首个出现的解)。

输入

输入文件包含多个测试用例。每个测试用例以两个整数nnkk开头。

输入以n=k=0n=k=0结束,其余情况下满足 1<=n<=1000001<=n<=100000

接下来是构成序列的nn个整数(每个数的绝对值不超过1000010000),随后是kk个针对该序列的查询。

每个查询给出一个目标值tt,满足 0<=t<=10000000000<=t<=1000000000

输出

对于每个查询,输出一行三个数:某个最接近的绝对和值,以及该和值对应的子区间的起始索引ll和结束索引uu

索引从11开始,最大为nn

关键点说明

输入以n=k=0n=k=0结束,程序需正确处理这一终止条件。

输出中的“某个最接近的绝对和值”意味着可能存在多个子区间满足条件,输出任意一个合法解即可。

索引从11开始计数,例如序列 [a,b,c][a,b,c] 的完整索引范围为1——31——3

输入数据1

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

输出数据1

5 4 4
5 2 8
9 1 1
15 1 15
15 1 15

来源

ACM国际大学生程序设计竞赛(ACM-ICPC) 德国乌尔姆大学分站赛