题目描述
今天是 YQH 的生日,她得到了一个 1∼n 的排列作为礼物。
YQH 是一个有强迫症的女孩子,她希望把这个排列从小到大排序,具体的,她可以进行这样的操作:
- 把 [1,n] 分成若干个区间,假如是 m 段,依次为 [l1,r1],[l2,r2],…,[lm,rm],其中 l1=1,rm=n,li+1=ri+1,li≤ri。
- 假如原来的排列为 a1,…,n,那么把排列变为 alm,alm+1,…,arm,alm−1,alm−1+1,…,arm−1,…,al1,al1+1,…,ar1,即把每一段看作一个整体,然后把这个排列进行 reverse。
YQH 希望进行尽可能少的操作,把序列从小到大排序。但是她太笨了,所以她找到你帮忙。注意,你不需要得到最小操作数。
输入格式
第一行一个正整数 n,表示排列长度。
第二行 n 个整数 a1,a2,…,an,表示 YQH 获得的排列,我们保证 a1,…,n 是 1∼n 的排列。
输出格式
第一行一个整数表示你进行的操作次数,假设为 p。
接下来 p 行,每行第一个整数 m 表示你这次操作把排列分成 m 段,接下来 m 个整数 leni 分别表示第 i 段的长度,即 ri−l1+1 为 leni,你需要保证 ∑mi=1leni=n。
样例
输入1
4 3 1 2 4
输出1
2 2 3 1 3 1 1 2
第一次操作,把序列分为 [3,1,2],[4],操作完变为 [4,3,1,2]。
第二次操作,把序列分为 [4],[3],[1,2],操作完变为 [1,2,3,4]。
输入2
6 6 5 4 3 2 1
输出2
1 6 1 1 1 1 1 1
第一次操作,把序列分为 [6],[5],[4],[3],[2],[1],操作完变为 [1,2,3,4,5,6]。
输入3
1 1
输出3
0
原序列已经有序,无需操作。
数据范围
本题采用评分参数进行评分,具体的,对于每个测试点,我们有评分参数 p0,p1,p2,p3,p4,保证 pi≥pi+1。假如你的操作数为 p,你在该测试点的得分为
[p≤p0]+∑3i=0max
其中定义 0/0=1,-1/0=-\infty 。
对于每个子任务,假如该子任务分值为 w,则你的得分为该子任务所有测试点得分的最小值乘上 w。
\text{subtask1 10pts},n\le8,p_0=p_1=p_2=p_3=p_4=10^6。
\text{subtask2 20pts},n\le200,p_0=p_1=p_2=p_3=p_4=40000。
\text{subtask3 70pts},n=20000,p_0=1000,p_1=500,p_2=240,p_3=140,p_4=90。