#L2818. 「eJOI2018」循环排序

    ID: 5132 传统题 1000ms 256MiB 尝试: 3 已通过: 1 难度: 10 上传者: 标签>贪心数据结构Hashing图结构图的遍历强连通分量模拟

「eJOI2018」循环排序

题目描述

本题译自 eJOI2018 Problem F. Cycle Sort

给定一个长为 nn 的数列 {ai}\{a_i\},你可以多次进行如下操作:
选定 kk 个不同的下标 i1,i2,,iki_1, i_2, \cdots, i_k(其中 1ijn1 \le i_j \le n),然后将 ai1a_{i_1} 移动到下标 i2i_2 处,将 ai2a_{i_2} 移动到下标 i3i_3 处,……,将 aik1a_{i_{k-1}} 移动到下标 iki_{k} 处,将 aika_{i_k} 移动到下标 i1i_1 处。

换言之,你可以按照如下的顺序轮换元素:$i_1 \rightarrow i_2 \rightarrow i_3 \rightarrow \cdots \rightarrow i_{k-1} \rightarrow i_k \rightarrow i_1$。

例如:n=4n=4{ai}={10,20,30,40}\{a_i\}=\{ 10, 20, 30, 40\}i1=2i_1=2i2=3i_2=3i3=4i_3=4,则操作完成后的 aa 数列变为 {10,40,20,30}\{ 10, 40, 20, 30\}

你的任务是用操作次数最少的方法将整个数列排序成不降的。注意,所有操作中选定下标的个数总和不得超过 ss。如果不存在这样的方法(无解),输出 -1\texttt{-1}

输入格式

第一行,22 个整数,nnss $(1 \le n \le 2 \times 10^5, 0 \le s \le 2 \times 10^5)$。
第二行,nn 个整数 a1,a2,a3,ana_1, a_2, a_3, \cdots a_n,表示数列 {ai}\{a_i\},其中 1ai1091 \le a_i \le 10^9

输出格式

如果无解,仅输出 -1\texttt{-1}
否则,第一行输出一个整数 qq(可以为 00,参见样例 33),表示最少需要进行的操作次数。
接下来 2×q2 \times q 行描述每次操作。
对于每次操作,先输出一个整数 kk 表示此操作选定的下标数量,然后在下一行中输出 kk 个整数 i1,i2,,iki_1, i_2, \cdots, i_k
在操作次数 qq 最少的情况下,你可以输出任意一种可行方案。

样例 1

输入

5 5
3 2 3 1 1

输出

1
5
1 4 2 3 5

你可以用两次操作 1411 \rightarrow 4 \rightarrow 123522 \rightarrow 3 \rightarrow 5 \rightarrow 2 排序数组,但这样会 WA,因为你的任务是最小化 qq,而最优解的 q=1q=1。 一种可行的方法是 $1 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 5 \rightarrow 1$,即样例输出。

样例 2

输入

4 3
2 1 4 3

输出

-1

所有操作中选定下标的个数总和的最小值为 44(一种可行的方法是 1211 \rightarrow 2 \rightarrow 13433 \rightarrow 4 \rightarrow 3),因此无解。

样例 3

输入

2 0
2 2

输出

0

数组已经有序,因此不需要进行操作。

样例 4

输入

6 9
6 5 4 3 2 1

输出

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

样例 5

输入

6 8
6 5 4 3 2 1

输出

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

样例 4455 满足子任务 6677 的限制。

数据范围与提示

子任务编号 分数 限制
1 0 样例
2 5 n,s2n, s \le 21ai21 \le a_i \le 2
3 n5n \le 5
4 1ai21 \le a_i \le 2
5 10 {ai}\{a_i\}11nn 的所有正整数出现且恰好只出现一次,s=2×ns=2 \times n
6 {ai}\{a_i\}11nn 的所有正整数出现且恰好只出现一次,n1000n \le 1000
7 15 {ai}\{a_i\}11nn 的所有正整数出现且恰好只出现一次
8 s=2×ns=2 \times n
9 n1000n \le 1000
10 20 无特殊限制