问题 5962 --最大差值是多少?

5962: 最大差值是多少?★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 56  解决: 22
[提交][状态][命题人:]

题目描述

给我们一个包含n个正整数的数组a1,a2an,可以对这个数组执行一次以下操作:选择该数组的一个子段,并将其循环旋转任意次。

请注意,该操作只可以执行一次。我们可以对该操作进一步描述如下:

1)取两个整数lr,满足1≤l≤r≤n,以及一个任意正整数k

2)重复下列操作k次:al=al+1, al+1=al+2ar - 1=ar, ar=al(所有更改同时发生)

请问,执行上述操作后,我们可以得到的an-a1的最大值是多少?

输入

        第一行一个整数t(1≤t≤50):测试用例数;

        每个测试用例两行:

        第一行一个整数n1≤n≤2000):n为数组的长度;

        第二行为n个整数a1,a2,a3,……,ai,……,an1≤ai≤999):数组an个元素;

        输入数据确保,所有测试样例的n之和不超过2000;

输出

       共t行,每个测试用例一行一个整数:an-a1的最大值。
样例输入
Copy
5
6
1 3 9 11 5 7
1
20
3
9 99 999
4
2 1 8 1
3
2 1 5
样例输出
Copy
10
0
990
7
4

提示

在第一个测试用例中,我们可以选择l=3,r=6,k=2; 即对子段[9,11,5,7]循环旋转2次,这样就可以实现以下变换:[1,3,9,11,5,7][1,3,5,7,9,11],此时:a6-a1=11-1=10,我们无法再找到比它更大的差值了。

来源

 

[提交][状态]