P17123 [ICPC 2025 Shanghai R] Singularity

题目背景

试题来自 [清华大学学生算法协会](https://gitlink.org.cn/thusaa/ICPC2025shanghai)。

题目描述

在 $2077$ 年,出题变得十分简单。机器人会随机设定一些操作来生成一道题目,然后将其解决。出题人只需要检查题目是否正确即可。 下面是一道来自 $2077$ 年的题目: 给定一个排列 $p_1, p_2, \cdots, p_n$,保证 $n$ 是**偶数**。你希望仅使用一种操作来将这个排列排序: - `FakeSort(l, r)`:你必须保证 $r - l + 1$ 是偶数。令 $k = r - l + 1$,则连续子序列 $p_l, p_{l+1}, \cdots, p_r$ 中最大的 $k/2$ 个元素和最小的 $k/2$ 个元素将被各自独立排序。具体而言,设 $L_1, L_2, \cdots, L_{k/2}$ 为最大的 $k/2$ 个数的下标,$S_1, S_2, \cdots, S_{k/2}$ 为最小的 $k/2$ 个数的下标。我们首先将下标 $L_1 \sim L_{k/2}$ 上的数排序,然后将下标 $S_1 \sim S_{k/2}$ 上的数排序。 下面是一个具体例子:假设排列为 $p = \{2, 5, 7, 1, 8, 6, 4, 3\}$。若调用 `FakeSort(2,7)`: - $k = r - l + 1 = 6$。连续子序列 $p_l, \cdots, p_r$ 为 $\{5, 7, 1, 8, 6, 4\}$;我们将分别对该序列中最大的 $3$ 个数和最小的 $3$ 个数进行排序。 - $p = \{2, 5, \textbf{7}, 1, \textbf{8}, \textbf{6}, 4, 3\}$;最大的 $3$ 个数以粗体标出。排序后变为 $p = \{2, 5, \textbf{6}, 1, \textbf{7}, \textbf{8}, 4, 3\}$。 - $p = \{2, \textbf{5}, 6, \textbf{1}, 7, 8, \textbf{4}, 3\}$;最小的 $3$ 个数以粗体标出。排序后变为 $p = \{2, \textbf{1}, 6, \textbf{4}, 7, 8, \textbf{5}, 3\}$。 因此 $p = \{2, 5, 7, 1, 8, 6, 4, 3\}$ 经过 `FakeSort(2,7)` 后变为 $\{2, 1, 6, 4, 7, 8, 5, 3\}$。 请使用不超过 $114$ 次操作将排列排序,或判定这不可能。可以证明,如果一个排列能通过该操作排序,则一定存在一种使用不超过 $114$ 次操作的方法。

输入格式

输入包含多组测试用例。第一行包含一个整数 $T$ ($1 \le T \le 10^3$),表示测试用例的数量。 对于每组测试用例,第一行包含一个**偶数** $n$ ($4 \le n \le 10^5$),表示排列的长度。 第二行包含 $n$ 个整数 $p_1, p_2, \cdots, p_n$ ($1 \le p_i \le n$),即你需要排序的排列。保证 $p$ 是一个排列。 保证所有测试用例的 $n$ 之和不超过 $2 \times 10^5$。

输出格式

对于每组测试用例,如果无法将排列排序,输出 `-1`。 否则,输出一个整数 $k$ ($0 \le k \le 114$),表示使用的操作次数。 接下来的 $k$ 行,每行输出 $l, r$ ($1 \le l \le r \le n$,$r - l + 1$ 为偶数),表示执行 `FakeSort(l, r)`。

说明/提示

翻译由 DeepSeek V4 Pro 完成