1930: 整理积木
内存限制:256 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:10
解决:10
题目描述
Little Squirrel 有N块积木,每块积木都有一个唯一的编号(1~N),他经常喜欢将这些积木拼成长长的火车。但是,时间一长,Little Squirrel 对拼火车慢慢失去了兴趣。于是,Daddy Squirrel 想到了一个新的玩法――整理。
首先,他只对前2^k块积木进行整理(k是满足2^p<=N的所有p的最大值),多余的积木就保持原样,然后对于这2^k块积木,他按照如下规则进行整理:
1、如果当前要整理的积木数不止一块,则将当前积木分成数量相等的两个部分。然后,以相同的方法先后对前一部分和后一部分的积木进行整理;
2、将分成两个部分的积木重新拼接起来。如果前一部分的第一块积木的编号比后一部分的第一块积木的编号小,则将后一部分积木拼接到前一部分积木之后,否则,将前一部分积木拼接到后一部分积木之后。
例如:总共8块积木,原始顺序为:8 5 2 3 4 7 1 6,经过整理后得到:1 6 4 7 2 3 5 8。
步骤 |
操作 |
积木状态 |
|||||||
0 |
|
8 |
5 |
2 |
3 |
4 |
7 |
1 |
6 |
1 |
拆分 |
8 |
5 |
2 |
3 |
4 |
7 |
1 |
6 |
2 |
拆分 |
8 |
5 |
2 |
3 |
4 |
7 |
1 |
6 |
3 |
拆分 |
8 |
5 |
2 |
3 |
4 |
7 |
1 |
6 |
4 |
交换 |
5 |
8 |
2 |
3 |
4 |
7 |
1 |
6 |
5 |
合并 |
5 |
8 |
2 |
3 |
4 |
7 |
1 |
6 |
6 |
拆分 |
5 |
8 |
2 |
3 |
4 |
7 |
1 |
6 |
7 |
合并 |
5 |
8 |
2 |
3 |
4 |
7 |
1 |
6 |
8 |
交换 |
2 |
3 |
5 |
8 |
4 |
7 |
1 |
6 |
9 |
合并 |
2 |
3 |
5 |
8 |
4 |
7 |
1 |
6 |
输入
输入数据共两行,第一行包含一个正整数N(1<=N<=1,500)。
第二行,包含N个用空格隔开的数字,表示原始积木的顺序。
输出
输出数据共一行,包含N个用空格隔开的数字,表示按题目要求排序后的积木的顺序。
样例输入 复制
8
8 5 2 3 4 7 1 6
样例输出 复制
1 6 4 7 2 3 5 8