CF2077D Maximum Polygon

题目描述

给定一个长度为 $n$ 的数组 $a$,确定字典序最大的 $^{\text{∗}}$ 子序列 $^{\text{†}}$ $s$,使得 $s$ 可以作为多边形的边长。 当且仅当 $|s| \geq 3$ 且满足以下条件时,$s$ 可以作为多边形的边长: $$ 2 \cdot \max(s_1, s_2, \ldots, s_{|s|}) < s_1 + s_2 + \ldots + s_{|s|}. $$ 如果不存在这样的子序列 $s$,输出 $-1$。 $^{\text{∗}}$ 序列 $x$ 的字典序小于序列 $y$,当且仅当以下条件之一成立: - $x$ 是 $y$ 的前缀,但 $x \neq y$; - 在 $x$ 和 $y$ 第一个不同的位置,$x$ 的元素小于 $y$ 中对应的元素。 $^{\text{†}}$ 序列 $x$ 是序列 $y$ 的子序列,当且仅当 $x$ 可以通过从 $y$ 中删除若干(可能为零或全部)元素得到。

输入格式

每个测试包含多个测试用例。第一行输入测试用例的数量 $t$($1 \le t \le 10^4$)。接下来描述每个测试用例。 每个测试用例的第一行输入一个整数 $n$($3 \leq n \leq 2 \cdot 10^5$)——数组 $a$ 的长度。 第二行输入 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 10^9$)——数组 $a$。 保证所有测试用例的 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,按以下格式输出答案: 如果存在答案,按以下格式输出: 第一行输出整数 $k$($1 \leq k \leq n$)——子序列 $s$ 的长度。 第二行输出 $k$ 个整数 $s_1, s_2, \ldots, s_k$($1 \leq s_i \leq 10^9$,$s$ 是 $a$ 的子序列)——子序列 $s$。注意输出的是元素值,而非下标。 否则,输出一行整数 $-1$。

说明/提示

在第一个测试用例中,不存在可以作为多边形边长的子序列。 在第二个测试用例中,有两个可以作为多边形边长的子序列:$1, 4, 2, 3$ 和 $4, 2, 3$。后者是字典序更大的子序列。 翻译由 DeepSeek R1 完成