#P2818. 「eJOI2018」循环排序

「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=4, \{a_i\}=\{ 10, 20, 30, 40\}, i_1=2, i_2=3, i_3=4$ ,则操作完成后的 aa 数列变为 {10,40,20,30}\{ 10, 40, 20, 30\}

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

输入格式

第一行, 22 个整数, nn 和 $s\ (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 ,参见样例 3 ),表示最少需要进行的操作次数。
接下来 2×q2 \times q 行描述每次操作。
对于每次操作,先输出一个整数 kk 表示此操作选定的下标数量,然后在下一行中输出 kk 个整数 i1,i2,,iki_1, i_2, \cdots, i_k
在操作次数 qq 最少的情况下,你可以输出任意一种可行方案。

5 5
3 2 3 1 1
1
5
1 4 2 3 5
4 3
2 1 4 3
-1
2 0
2 2
0
6 9
6 5 4 3 2 1
2
6
1 6 2 5 3 4
3
3 2 1
6 8
6 5 4 3 2 1
3
2
3 4
4
1 6 2 5
2
2 1

数据范围与提示

数据限制

子任务编号 分数 限制
11 00 样例
22 55 n,s2n, s \le 21ai21 \le a_i \le 2
33 55 n5n \le 5
44 55 1ai21 \le a_i \le 2
55 1010 {ai}\{a_i\}11nn 的所有正整数出现且恰好只出现一次, s=2×ns=2 \times n
66 1010 {ai}\{a_i\}11nn 的所有正整数出现且恰好只出现一次, n1000n \le 1000
77 1515 {ai}\{a_i\}11nn 的所有正整数出现且恰好只出现一次
88 1515 s=2×ns=2 \times n
99 1515 n1000n \le 1000
1010 2020 无特殊限制