/ Vijos / 题库 /

歪斜排序

歪斜排序

时间限制:1秒  内存限制:256M


【问题描述】

  农夫约翰有 \(2^N\) 头奶牛,每头奶牛在身体侧面用油漆写上了一个数字标记,取值范围为 \(1..2^N\)。它们按随机的顺序站在在一条线上。第一头牛是 \(cow_1\),第二头牛是 \(cow_2(1 ≤ cow_i ≤ 2^N)\)。当然,\(cow_1\) 不太可能油漆标签也是 \(1\)。

  FJ执行下面的算法来把它们按顺序排列:
  1. 如果有一个以上的牛,然后把奶牛分成两个大小相等的子组。两个子组继续执行该算法。
  2. 递归返回时,比较两个子组的字典序,如果后面的子组字典序小,将两个子组整体交换

  奶牛想知道执行这个 “排序” 程序一共需要走动多少距离。具体来说,根据奶牛的初始位置,请求出:
  1. 所有奶牛的总行驶距离的总和
  2. 奶牛的执行这个'排序'程序后最终的序列。

【输入格式】

  第 \(1\) 行:一个整数:\(N\);
  第 \(2..2^N+1\) 行:第 \(i+1\) 行包含一个整数:\(cow_i\)。

【输出格式】

  第 \(1\) 行:一个整数,总行驶距离所有的奶牛;
  第 \(2..2^N+1\) 行:第 \(i+1\) 行包含一个整数:位置 \(i\) 站着的牛。

【输入输出样例1】

 Input

3
8
5
2
3
4
7
1
6

 Output

50
1
6
4
7
2
3
5
8

【数据说明】

  对于 \(100\%\) 的数据,\(1 ≤ N ≤ 10\)

【来源】

  Mr.he

信息

ID
1449
难度
(无)
分类
(无)
标签
递交数
0
已通过
0
通过率
?
被复制
2
上传者