P15109 Adverse Present

题目描述

给你一个长度为 $n$ 的排列,和一个整数 $tp\in\{0,1\}$。 定义一次操作如下: 选择一个子序列从原序列删除,并按原来顺序添加到排列最后。 请输出将这个排列**从小到大排序**所需要的最小操作次数 $k$ 并构造,特别地,如果 $k\cdot n\geq 3\times 10^6$ 或者 $tp=0$,你不需要构造(请参考输入输出格式)。 排列的定义:一个长度为 $n$ 的排列是一个由 $1\sim n$ 的正整数组成的序列,满足其中每个数都出现了恰好一次。 子序列的定义:我们称序列 $b$ 是序列 $a$ 的子序列,当且仅当可以通过删除 $a$ 中的若干个元素得到 $b$。

输入格式

第一行两个整数 $n,tp$,代表排列长度,以及你是否需要构造方案。 第二行 $n$ 个数,第 $i$ 个数为排列中第 $i$ 个元素 $a_i$,保证这些数互不相同。

输出格式

第一行一个数 $k$,代表所需最小次数。 若 $k\cdot n\geq 3\times 10^6$ 或者 $tp=0$,在第二行输出 `-1` 并退出。 否则接下来 $k$ 行,每行第一个数 $c$ 代表此次操作所选择的子序列长度。然后输出 $c$ 个互不相同的数,代表此次操作选择的子序列由当前序列哪些下标的元素组成,这些数顺序随意。

说明/提示

**本题采用捆绑测试。** $\texttt{Subtask 1(1pts)}:$ $a_i=i$。 $\texttt{Subtask 2(19pts):}$ $a_i=n-i+1$。 $\texttt{Subtask 3(15pts):}$ $n\le 5$。 $\texttt{Subtask 4(20pts):}$ $n\le 2\times 10^3$。 $\texttt{Subtask 5(15pts):}$ $tp=0$。 $\texttt{Subtask 6(30pts):}$ 无特殊限制。 对于所有数据,$1\leq n \leq 10^5$,保证 $a$ 是一个排列。