CF1492B.Card Deck

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

Card Deck

题目描述

你有一副包含 nn 张牌的牌堆,你希望将其重新排列成一个新的牌堆。

每张牌的数值为 11nn 之间的某个整数,记为 pip_i。所有 pip_i 两两不同。牌堆中的牌从下到上编号,即 p1p_1 表示最底下的牌,pnp_n 表示最顶上的牌。

每一步操作,你可以选择一个整数 k>0k > 0,从原牌堆的顶部取出 kk 张牌,保持它们的顺序,将它们放到新牌堆的顶部。你可以重复进行该操作,直到原牌堆为空。(具体操作可参考题目说明部分。)

我们定义一个牌堆的序为 i=1nnnipi \sum\limits_{i = 1}^{n}{n^{n - i} \cdot p_i}

给定原始牌堆,请输出通过上述操作能够得到的序最大的牌堆。输出新牌堆从底到顶的牌面数值。

如果有多种方案,输出任意一种即可。

输入格式

第一行包含一个整数 tt1t10001 \le t \le 1000),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn1n1051 \le n \le 10^5),表示牌堆的大小。

第二行包含 nn 个整数 p1,p2,,pnp_1, p_2, \dots, p_n1pin1 \le p_i \le n,且 iji \neq jpipjp_i \neq p_j),表示从底到顶的牌面数值。

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

输出格式

对于每个测试用例,输出一行,表示通过操作得到的序最大的牌堆,从底到顶输出牌面数值。

如果有多种方案,输出任意一种。

说明/提示

在第一个测试用例中,一种最优策略如下:

  1. pp 顶部取 11 张牌放到 pp' 顶部:pp 变为 [1,2,3][1, 2, 3]pp' 变为 [4][4]
  2. 再取 11 张牌放到 pp' 顶部:pp 变为 [1,2][1, 2]pp' 变为 [4,3][4, 3]
  3. 再取 11 张牌放到 pp' 顶部:pp 变为 [1][1]pp' 变为 [4,3,2][4, 3, 2]
  4. 再取 11 张牌放到 pp' 顶部:pp 变为空,pp' 变为 [4,3,2,1][4, 3, 2, 1]

最终,pp' 的序为 $4^3 \cdot 4 + 4^2 \cdot 3 + 4^1 \cdot 2 + 4^0 \cdot 1 = 256 + 48 + 8 + 1 = 313$。

在第二个测试用例中,一种最优策略如下:

  1. pp 顶部取 44 张牌放到 pp' 顶部:pp 变为 [1][1]pp' 变为 [5,2,4,3][5, 2, 4, 3]
  2. 再取 11 张牌放到 pp' 顶部:pp 变为空,pp' 变为 [5,2,4,3,1][5, 2, 4, 3, 1]

最终,pp' 的序为 $5^4 \cdot 5 + 5^3 \cdot 2 + 5^2 \cdot 4 + 5^1 \cdot 3 + 5^0 \cdot 1 = 3125 + 250 + 100 + 15 + 1 = 3491$。

在第三个测试用例中,一种最优策略如下:

  1. pp 顶部取 22 张牌放到 pp' 顶部:pp 变为 [4,2,5,3][4, 2, 5, 3]pp' 变为 [6,1][6, 1]
  2. 再取 22 张牌放到 pp' 顶部:pp 变为 [4,2][4, 2]pp' 变为 [6,1,5,3][6, 1, 5, 3]
  3. 再取 22 张牌放到 pp' 顶部:pp 变为空,pp' 变为 [6,1,5,3,4,2][6, 1, 5, 3, 4, 2]

最终,pp' 的序为 $6^5 \cdot 6 + 6^4 \cdot 1 + 6^3 \cdot 5 + 6^2 \cdot 3 + 6^1 \cdot 4 + 6^0 \cdot 2 = 46656 + 1296 + 1080 + 108 + 24 + 2 = 49166$。

由 ChatGPT 4.1 翻译

样例

4
4
1 2 3 4
5
1 5 2 4 3
6
4 2 5 3 6 1
1
1
4 3 2 1
5 2 4 3 1
6 1 5 3 4 2
1

在线编程 IDE

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