CF1833D Flipper
题目描述
给你一个长度为 $ n $ 的数列 $ p $。
一个数列是 $ 1 $ 到 $ n $ 按某一顺序组成的阵列。例如,$ {2,3,1,5,4} $ 是一个数列,而 $ {1,2,2} $ 不是(因为 $ 2 $ 出现了两次),$ {1,3,4} $ 也不是一个数列(因为 $ n=3 $,但数列中包含 $ 4 $)。
对于数列 $ p $,进行一次如下操作:
- 选择一个区间 $ [l, r] $($ 1\le l\le r\le n $,一个区间是一串连续的数 $ {p_l, p_{l+1}, \ldots, p_{r-1}, p_r} $),并将它反转过来。反转一个区间即交换如下的数对 $ (p_l, p_r),(p_{l+1}, p_{r-1}),\dots,(p_{l + i}, p_{r - i}) $(其中 $ l + i \le r - i $)。
- 交换前缀和后缀:$ [r+1, n] $ 和 $ [1, l - 1] $(注意:这些区间可能是空的)。
例如,给定 $ n = 5, p = \{2, \color{blue}{3},\color{blue}{1}, \color{blue}{5}, \color{blue}{4} \color{black}\} $,如果你选择区间 $ [l = 2, r = 3] $,反转区间以后 $ p = \{\color{green}{2}, \color{blue}{1}, \color{blue}{3}, \color{green}{5}, \color{green}{4}\color{black}\} $。接着交换区间 $ [4, 5] $ 与 $ [1, 1] $。得到 $ p = \{\color{green}{5}, \color{green}{4}, 1, 3, \color{green}{2}\color{black}\} $。可以证明这是操作后该排列的字典序的最大可能结果。
你需要输出通过一次所述操作后可以得到的字典序最大数列。
如果存在一个 $ i $($ 1 \le i \le n $),使 $ a_j = b_j $ 对于 $ 1 \le j < i $ 且 $ a_i > b_i $,那么一个数列 $ a $ 的字典序大于数列 $ b $ 的字典序 。
输入格式
输入的第一行包含一个整数 $ t $,表示测试数据的组数。
对于每组数据:
第一行包含一个单一的整数 $ n $ 表示数列的长度。
第二行包含 $ n $ 个整数:$ p_1, p_2, \ldots, p_n $ 即数列 $ p $。
输出格式
对于每组测试数据,输出一行 $ n $ 个整数,表示经过一次操作后可以得到的字典序最大的数列。
说明/提示
对于 $ 100\% $ 的数据,$ 1 \le t \le 1000 $,$ 1 \le n \le 2000 $。\
保证每次 $ T $ 组测试数据的 $ n $ 之和不超过 $ 2000 $。