D. 封锁元素
时间限制:每个测试 4 秒
内存限制:每个测试 256 MB
给定一个数组 a1,a2,…,an。你的任务是封锁数组中的某些元素,以最小化其代价。假设你封锁了位置为 1≤b1<b2<⋯<bm≤n 的元素。那么数组的代价定义为以下两者的最大值:
- 被封锁元素的总和,即 ab1+ab2+⋯+abm。
- 将封锁元素移除后,数组被分割成的各个段的最大和。具体来说,是以下 (m+1) 个子数组的最大和:[1,b1−1],[b1+1,b2−1],…,[bm−1+1,bm−1],[bm+1,n](形式为 [x,x−1] 的子数组的和视为 0)。
例如,若 n=6,原数组为 [1,4,5,3,3,2],且你封锁了位置 2 和 5 上的元素,则数组的代价将是封锁元素的总和(4+3=7)与各子数组的和(1,5+3=8,2)的最大值,即 max(7,1,8,2)=8。
你需要输出封锁后数组的最小代价。
输入
第一行包含一个整数 t(1≤t≤30000)——查询的数量。
每个测试用例包含两行。第一行包含一个整数 n(1≤n≤105)——数组 a 的长度。第二行包含 n 个元素 a1,a2,…,an(1≤ai≤109)——数组 a。
保证所有测试用例的 n 之和不超过 105。
输出
对于每个测试用例,输出一个数——封锁数组的最小代价。
样例
输入
3
6
1 4 5 3 3 2
5
1 2 3 4 5
6
4 1 6 3 10 7
输出
7
5
11
说明
第一个测试用例与题目描述中的数组相同。要获得代价 7,你需要封锁位置 2 和 4 上的元素。在这种情况下,数组的代价计算为以下的最大值:
- 封锁元素的总和,即 a2+a4=7。
- 将封锁元素移除后数组被分割成的各段的最大和,即 max(a1,a3,a5+a6)=max(1,5,5)=5。
因此代价为 max(7,5)=7。
在第二个测试用例中,你可以封锁位置 1 和 4 上的元素。
在第三个测试用例中,要得到答案 11,你可以封锁位置 2 和 5 上的元素。还有其他方法可以得到这个答案,例如封锁位置 4 和 6。