#P1121. 分割序列

分割序列

分割序列

题目描述

给定一个长度为 nn 的整数序列 a1,a2,,ana_1, a_2, \cdots, a_n ,把这个序列分成 kk 个连续的非空子数组,使得每个元素正好属于一个子数组。设 sis_i 是从左到右 ii 个子数组中元素的总和,计算每个 1kn1 \le k \le n 的最大值。

i=1ki×si\sum\limits_{i = 1}^k i \times s_i

更正式地说,对于每个 1kn1 \le k \le n ,让 r0=0r_0 = 0rk=nr_k = n ,你需要找到 (k1)(k - 1) 个整数 r1,r2,,rk1r_1, r_2, \cdots, r_{k - 1} ,使得 r0<r1<r2<<rk1<rkr_0 < r_1 < r_2 < \cdots < r_{k - 1} < r_k 和最大化

$$\sum\limits_{i = 1}^k i \times (\sum\limits_{j = r_{i - 1} + 1}^{r_i} a_j)$$

输入格式

有多个测试用例。输入的第一行包含一个整数 TT ,表示测试用例的数量。对于每个测试用例

第一行包含一个整数 nn1n5×1051 \le n \le 5 \times 10^5 ),表示序列的长度。( 1n5×1051 \le n \le 5 \times 10^5 ) 表示序列的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \cdots, a_n ( 106ai106-10^6 \le a_i \le 10^6 ),表示序列。

保证所有测试用例的 nn 之和不超过 5×1055 \times 10^5

输出格式

对于每个测试用例,输出一行包含 nn 个整数 v1,v2,,vnv_1, v_2, \cdots, v_n 并用空格隔开,其中 viv_ik=ik = i 的答案。

样例 #1

样例输入 #1

2
6
1 3 -4 5 -1 -2
1
100

样例输出 #1

2 4 5 3 1 -2
100

提示

对于第一个示例测试用例,考虑到 k=3k = 3 ,我们可以将序列划分为 {{1},{3,4},{5,1,2}}\{\{1\}, \{3, -4\}, \{5, -1, -2\}\} 。答案是 $1 \times 1 + 2 \times (3 - 4) + 3 \times (5 - 1 - 2) = 5$ 。