题目描述
某天晚上,cgy又双叒叕想吃鸡腿饼了,于是发短信让小马帮忙带n个鸡腿饼,这n个鸡腿饼的编号是从0到n−1的整数排列 p,这n个鸡腿饼的成本为所有相邻对鸡腿饼编号的位Xor的最大值,即总成本为
$\underset{1 \leq i \leq n-1}{\text{max}}p_i⊕p_{i+1}$
找出长度为n且成本最小的任意一系列鸡腿饼编号 p
排列
在该问题中,置换是由从 0 到 n−1 的任意顺序的 n
不同整数组成的数组。
例如, [2,3,1,0,4]是一个排列,但 [1,0,1]不是一个排列(1在数组中出现了两次)并且 [1,0,3]也不是排列( n=3 ,但 3 在数组中)
异或
⊕异或是一种二进制的位运算,符号以 XOR 或 ^ 表示。
相同为0,不同为1,即
1 ^ 1 = 0
0 ^ 0 = 0
1 ^ 0 = 1
输入
一行包含一个整数 n(2≤n≤2e5),即鸡腿饼的数量。
输出
打印n整数p1,p2,…,pn---具有最小成本的鸡腿饼编号序列。
如果有多个答案,请打印其中任何一个。
样例1
2
0 1
样例2
3
2 0 1
样例3
5
3 2 1 0 4
样例4
10
4 6 3 2 0 8 9 1 7 5
解释
注意
对于 n=2 ,有 2 个鸡腿饼编号序列:
-
[0,1] —成本为 0⊕1=1 。
-
[1,0] —成本为 1⊕0=1 。
对于 n=3 ,有 6 个鸡腿饼编号序列:
-
[0,1,2] —成本为 max(0⊕1,1⊕2)=max(1,3)=3 。
-
[0,2,1] —成本为 max(0⊕2,2⊕1)=max(2,3)=3 。
-
[1,0,2] —成本为 max(1⊕0,0⊕2)=max(1,2)=2 。
-
[1,2,0] —成本为 max(1⊕2,2⊕0)=max(3,2)=3 。
-
[2,0,1] —成本为 max(2⊕0,0⊕1)=max(2,1)=2 。
-
[2,1,0] -成本为 max(2⊕1,1⊕0)=max(3,1)=3 。