在银河中孤独摇摆 - 知更鸟 / HOYO-MiX / Chevy
题目描述
云浅给了你一个长为 n 的排列 p,你可以进行若干次操作,每次操作时,你可以先把序列任意划分成 k 段(k≥2),每段都是原排列的一个非空子区间,且每个数恰好属于一段。设你分出的 k 段分别为 p=A1+A2+⋯+Ak(加法表示序列的拼接),那么这次操作会把排列 p 变为 p=Ak+Ak−1+⋯+A1。
例如,p=(3,4,2,5,6,1,7),你可以选择 k=4,A1=(3,4),A2=(2),A3=(5,6,1),A4=(7),然后操作之后 p 会变为 Ak+Ak−1+⋯+A1,即 (7,5,6,1,2,3,4)。
你需要在 120 次操作内将排列排序为 1,2,⋯,n。可以证明一定有解。
输入格式
第一行一个正整数 n。
第二行 n 个正整数 p1,p2,⋯,pn。
输出格式
第一行一个非负整数 k 表示操作次数。
接下来 k 行,每行先输出一个正整数 m 表示这次操作将序列划分出的段数,接下来同一行内输出 m 个正整数 L1,L2,⋯,Lm 表示每段的长度。你需要保证 m≥2,L1+L2+⋯+Lm=n。
样例 1 输入
5
1 4 3 5 2
样例 1 输出
4
4 1 2 1 1
2 3 2
2 3 2
4 1 1 1 2
样例 1 解释
排列 p 的变化为 $(1,4,3,5,2)\to (2,5,4,3,1)\to (3,1,2,5,4)\to (5,4,3,1,2)\to (1,2,3,4,5)$。
测试点约束
对于所有数据,保证 1≤n≤20000。
子任务编号 |
n≤ |
特殊性质 |
依赖子任务 |
分值 |
Subtask #1 |
8 |
无 |
无 |
7 |
Subtask #2 |
120 |
1 |
22 |
Subtask #3 |
240 |
1,2 |
10 |
Subtask #4 |
1000 |
1,2,3 |
29 |
Subtask #5 |
20000 |
A |
无 |
14 |
Subtask #6 |
无 |
1,2,3,4,5,6 |
18 |
特殊性质 A:排列 p 从所有 1,2,⋯,n 的排列中均匀随机选取。