CF1611C.Polycarp Recovers the Permutation

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Polycarp Recovers the Permutation

题目描述

Polycarp 在白板上写下了一个长度为 nn 的数组 pp,它是 11nn 的一个排列。换句话说,在 pp 中,每个 11nn 的数字恰好出现一次。

他还准备了一个结果数组 aa,初始时为空(即长度为 00)。

接下来,他恰好进行了 nn 步操作。每一步操作如下:

  • 查看 pp 的最左端和最右端元素,选择其中较小的一个。
  • 如果选择了 pp 的最左端元素,则将其添加到 aa 的最左端;否则,如果选择了 pp 的最右端元素,则将其添加到 aa 的最右端。
  • 被选中的元素从 pp 中删除。

注意,在最后一步时,pp 只剩下一个元素,这个元素既是最左端也是最右端。在这种情况下,Polycarp 可以自由选择将其作为左端或右端处理。换句话说,这个元素可以被添加到 aa 的左端或右端(由 Polycarp 决定)。

让我们看一个例子。设 n=4n=4p=[3,1,4,2]p=[3, 1, 4, 2]。初始时 a=[]a=[]。然后:

  • 第一步,最小值在右端(值为 22),操作后 p=[3,1,4]p=[3,1,4]a=[2]a=[2](将 22 添加到右端)。
  • 第二步,最小值在左端(值为 33),操作后 p=[1,4]p=[1,4]a=[3,2]a=[3,2](将 33 添加到左端)。
  • 第三步,最小值在左端(值为 11),操作后 p=[4]p=[4]a=[1,3,2]a=[1,3,2](将 11 添加到左端)。
  • 第四步,最小值既是左端也是右端(值为 44)。假设 Polycarp 选择右端。操作后 p=[]p=[]a=[1,3,2,4]a=[1,3,2,4](将 44 添加到右端)。

因此,经过 nn 步操作后,aa 的一种可能取值为 a=[1,3,2,4]a=[1,3,2,4]

现在给定最终得到的数组 aa,请你找出任意一种可能的初始数组 pp,使得经过上述过程后能得到给定的 aa,或者判断无解。

输入格式

输入的第一行为一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

每个测试用例包含两行。第一行为一个整数 nn1n21051 \le n \le 2\cdot10^5),表示数组 aa 的长度。第二行为 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ain1 \le a_i \le n),表示数组 aa 的元素。所有 aa 中的元素互不相同。

保证所有测试用例中 nn 的总和不超过 21052\cdot10^5

输出格式

输出 tt 行,每行对应一个测试用例的答案:p1,p2,,pnp_1, p_2, \dots, p_n,表示任意一种可能的初始数组 pp,使得经过上述过程后能得到给定的 aapp 必须是 11nn 的一个排列。如果无解,输出 1-1

说明/提示

样例中的第一个测试用例已在题目描述中详细说明。对于该测试用例,可能还有其他正确答案。

第二个测试用例中,n=1n=1。因此,唯一可能的排列为 p=[1]p=[1]。确实,这是该测试用例的答案。

第三个测试用例,无论选择什么排列 pp,经过 nn 步操作后,得到的结果都不会是 a=[1,3,5,4,2]a=[1, 3, 5, 4, 2]

由 ChatGPT 4.1 翻译

样例

4
4
1 3 2 4
1
1
5
1 3 5 4 2
3
3 2 1
3 1 4 2
1
-1
2 3 1

在线编程 IDE

建议全屏模式获得最佳体验