CF2104B Move to the End
题目描述
给定一个由 $n$ 个整数组成的数组 $a$。
对于从 $1$ 到 $n$ 的每个整数 $k$,你需要执行以下操作:
1. 选择数组 $a$ 中的任意一个元素并将其移动到数组的最右端(可以选择最后一个元素,此时数组不会改变);
2. 输出数组 $a$ 最后 $k$ 个元素的和;
3. 将第一步选择的元素移回其原始位置(恢复原始数组 $a$)。
对于每个 $k$,你需要选择移动的元素,使得输出的值尽可能大。
请计算每个 $k$ 对应的输出值。
输入格式
第一行包含一个整数 $t$($1 \le t \le 10^4$)——测试用例的数量。
每个测试用例包含两行:
- 第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$);
- 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le 10^9$)。
输入数据的额外约束:所有测试用例的 $n$ 之和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,输出 $n$ 个整数。其中第 $i$ 个整数表示当 $k=i$ 时能够输出的最大值。
说明/提示
以题目描述中的第一个测试用例为例:
- 当 $k=1$ 时,可以选择将第 $6$ 个元素移动到末尾,数组变为 $[13, 5, 10, 14, 8, 13, 15]$,输出值为 $15$;
- 当 $k=2$ 时,可以选择将第 $6$ 个元素移动到末尾,数组变为 $[13, 5, 10, 14, 8, 13, 15]$,输出值为 $13 + 15 = 28$;
- 当 $k=3$ 时,可以选择将第 $4$ 个元素移动到末尾,数组变为 $[13, 5, 10, 8, 15, 13, 14]$,输出值为 $15 + 13 + 14 = 42$;
- 当 $k=4$ 时,可以选择将第 $5$ 个元素移动到末尾,数组变为 $[13, 5, 10, 14, 15, 13, 8]$,输出值为 $14 + 15 + 13 + 8 = 50$;
- 当 $k=5$ 时,可以选择将第 $1$ 个元素移动到末尾,数组变为 $[5, 10, 14, 8, 15, 13, 13]$,输出值为 $14 + 8 + 15 + 13 + 13 = 63$;
- 当 $k=6$ 时,可以选择将第 $1$ 个元素移动到末尾,数组变为 $[5, 10, 14, 8, 15, 13, 13]$,输出值为 $10 + 14 + 8 + 15 + 13 + 13 = 73$;
- 当 $k=7$ 时,可以选择将第 $6$ 个元素移动到末尾,数组变为 $[13, 5, 10, 14, 8, 13, 15]$,输出值为 $13 + 5 + 10 + 14 + 8 + 13 + 15 = 78$。
翻译由 DeepSeek V3 完成