CF1579E1.Permutation Minimization by Deque

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

Permutation Minimization by Deque

题目描述

实际上,问题 E1 和 E2 并没有太多共同之处。你应该将它们视为两个独立的问题。

给定一个长度为 nn 的排列 pp。长度为 nn 的排列是一个长度为 nn 的数组,其中每个整数 11nn 恰好出现一次。例如,[1,4,3,2][1, 4, 3, 2][4,2,1,3][4, 2, 1, 3] 是合法的排列,而 [1,2,4][1, 2, 4][1,2,2][1, 2, 2] 不是。

我们考虑一个初始为空的 双端队列(deque)。双端队列是一种支持在队首和队尾都能添加元素的数据结构。例如,如果当前队列中的元素为 [1,5,2][1, 5, 2],将元素 44 添加到队首后,队列变为 [4,1,5,2][\color{red}{4}, 1, 5, 2];将同一个元素添加到队尾后,队列变为 [1,5,2,4][1, 5, 2, \color{red}{4}]

排列中的元素依次被加入到初始为空的双端队列中,顺序从 p1p_1pnp_n。在每次加入元素之前,你可以选择将其加入到队首或队尾。

例如,若排列 p=[3,1,2,4]p = [3, 1, 2, 4],一种可能的操作序列如下:

  1. 33 加入队尾:队列为 [3][\color{red}{3}]
  2. 11 加入队首:队列为 [1,3][\color{red}{1}, 3]
  3. 22 加入队尾:队列为 [1,3,2][1, 3, \color{red}{2}]
  4. 44 加入队尾:队列为 [1,3,2,4][1, 3, 2, \color{red}{4}]

请你找出在整个排列处理完后,双端队列中可能得到的字典序最小的序列。

一个序列 [x1,x2,,xn][x_1, x_2, \ldots, x_n] 的字典序小于序列 [y1,y2,,yn][y_1, y_2, \ldots, y_n],当且仅当存在某个 ini \leq n,使得 x1=y1,x2=y2,,xi1=yi1x_1 = y_1, x_2 = y_2, \ldots, x_{i-1} = y_{i-1}xi<yix_i < y_i。换句话说,如果序列 xxyy 有一段(可能为空)前缀相同,且下一个元素 xxyy 的对应元素小,则 xx 的字典序更小。例如,序列 [1,3,2,4][1, 3, 2, 4] 的字典序小于 [1,3,4,2][1, 3, 4, 2],因为前两个元素 [1,3][1, 3] 相同,第三个元素 2<42 < 4

输入格式

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

接下来的 2t2t 行描述每个测试用例。

每个测试用例的第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5),表示排列的长度。第二行包含 nn 个用空格分隔的整数 pip_i1pin1 \le p_i \le n,所有 pip_i 均互不相同),表示排列的元素。

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

输出格式

输出 tt 行,每行对应一个测试用例的答案。每个答案应包含 nn 个用空格分隔的整数,表示通过上述算法得到的字典序最小的排列。

说明/提示

从排列 [3,1,2,4][3, 1, 2, 4] 得到字典序最小排列 [1,3,2,4][1, 3, 2, 4] 的一种方式已在题目描述中给出。

由 ChatGPT 4.1 翻译

样例

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

在线编程 IDE

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