AT_xmascon16_d Distributed Sorting

题目描述

在 20XX 年,世界被 Distributed AtC◯der 公司统治,形成了一个反乌托邦社会。在这种背景下,人们唯一的娱乐活动就是以分布式和并行处理为主题的编程竞赛。这些比赛成为了社会生活的一部分,例如,周末全家通过 ssh 访问超级计算机已经成为非常常见的活动。 虽然下面的问题描述更接近并行处理而非真正的分布式处理,我们决定称之为分布式排序,因为标题中的 D 更加合适。此外,今天是圣诞节,我们不打算纠结这些琐事。 在分布式和并行处理的场景下,即便是一些看似基础的任务,也可以通过多种方式进行优化。例如,考虑将一个由 $N$ 个不同整数组成的序列 $X_1, X_2, \ldots, X_N$ 进行升序排序。 我们有一台机器,它可以进行以下操作: - 操作:给出 $2k$ 个不同的索引 $A_1, A_2, \ldots, A_{2k}$,机器会对每一个 $i$ ($1 \leq i \leq k$),交换 $X_{A_{2i-1}}$ 和 $X_{A_{2i}}$ 的值。这里,所有索引都必须满足 $1 \leq A_j \leq N$。 例如,当 $X = (5, 3, 1, 2, 4)$,若 $k=2$,并且操作中的索引为 $(A_1, A_2, A_3, A_4) = (1, 3), (2, 4)$,那么执行操作后,序列会变为 $(1, 2, 5, 3, 4)$。 你的任务是编写一个程序,计算使用上述操作将序列 $X$ 排序到升序所需的最小操作次数,并输出实现该最小操作次数的一组操作步骤。

输入格式

输入从标准输入中给出,格式如下: > $N$ $X_1$ $X_2$ $\ldots$ $X_N$

输出格式

首先输出一个整数,表示将序列 $X$ 升序排序所需的最小操作次数。接下来的每一行输出一种具体的操作步骤。 每行先输出交换操作的对数 $k$,然后再列出 $2k$ 个整数 $A_1, A_2, \ldots, A_{2k}$,这些数之间用空格隔开。

说明/提示

- $1 \leq N \leq 10^5$。 - $1 \leq X_i \leq 10^9$。 - $X_i$ 是互不相同的整数。 ### 示例说明 只要满足最小操作次数并能正确升序排序,其他输出也是合格的。例如,对于给定输入示例,输出 `2 1 1 2 1 3 1` 也是正确的。 **本翻译由 AI 自动生成**