luogu#P16548. [ICPC 2026 LAC] Booksort

[ICPC 2026 LAC] Booksort

题目描述

Beatriz 一直很喜欢阅读,于是她决定开一家书店,好让自己整天都能与书为伴。她希望确保书籍摆放得井井有条,以便吸引更多顾客。

书店的一个大书架上,有一排共 NN 摞书,从左到右编号为 11NN。第 ii 摞书包含 AiA_i 本书。Beatriz 希望各摞书的数量呈非递减顺序,即对于 i=1,2,,N1i = 1, 2, \ldots, N - 1AiAi+1A_i \le A_{i+1},这可能需要重新整理这些书。

然而,Beatriz 很懒,实在不想亲自动手整理书籍。于是她请来最好的朋友 Bernardo 帮忙。他们约定:Beatriz 向 Bernardo 发出一系列指令。每条指令中,Beatriz 会指定两摞不同的书 iijj,Bernardo 则把这 s=Ai+Ajs = A_i + A_j 本书取出来,并将它们尽可能均匀地重新分配。这意味着执行该指令后,这两摞书的本数将按以下方式更新:

$$\begin{aligned} A_i &= \left\lfloor \frac{s}{2} \right\rfloor, \\ A_j &= \left\lceil \frac{s}{2} \right\rceil. \end{aligned}$$

Beatriz 不想让 Bernardo 花费太多时间帮她搬书。她希望得到一个长度不超过 10510^5 的指令序列,使得最终达到所期望的非递减顺序。但你知道,Beatriz 并不想自己来决定指令。你能为她准备任意一个合法的指令序列吗?

输入格式

第一行包含一个整数 NN2N50002 \le N \le 5000),表示书架上书摞的数量。每摞书用一个从 11NN 的不同整数标识。

第二行包含 NN 个整数 A1,A2,,ANA_1, A_2, \ldots, A_N1Ai1051 \le A_i \le 10^5),其中 AiA_i 是第 ii 摞书的初始本数。

输出格式

第一行必须输出一个整数 kk0k1050 \le k \le 10^5),表示要执行的指令数量。

接下来的 kk 行,每行用两个整数 iijj1i,jN1 \le i, j \le Niji \neq j)描述一条指令,表示将第 ii 摞和第 jj 摞的书按所述方式重新分配。按答案中出现的顺序执行完所有指令后,书架上的书摞必须呈非递减顺序。

可以证明,在给定约束下总是存在合法答案。如果有多组解,输出其中任意一组即可;不需要最小化 kk

3
1 1 1
0
3
1 1 1
3
1 2
1 2
2 3
5
14 7 13 8 15
3
2 1
1 4
3 4

提示

样例 1 解释:

由于书架初始已经按非递减顺序排好,一个空的指令序列是合法的输出。

样例 2 解释:

尽管书架初始已经有序,但该输出是合法的,因为书架在经过不超过 10510^5 条指令后仍然有序。不需要最小化指令数量。

样例 3 解释:

第一条指令(i=2,j=1i=2, j=1)将书架从 [14,7,13,8,15\underline{14}, \underline{7}, 13, 8, 15] 变为 [11,10,13,8,15\underline{11}, \underline{10}, 13, 8, 15]。

第二条指令(i=1,j=4i=1, j=4)将书架从 [11,10,13,8,15\underline{11}, 10, 13, \underline{8}, 15] 变为 [9,10,13,10,15\underline{9}, 10, 13, \underline{10}, 15]。

第三条指令(i=3,j=4i=3, j=4)将书架从 [9,10,13,10,159, 10, \underline{13}, \underline{10}, 15] 变为 [9,10,11,12,159, 10, \underline{11}, \underline{12}, 15],此时已按非递减顺序排好。

翻译由 DeepSeek V4 Pro 完成