CF1632B.Roof Construction

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Roof Construction

题目描述

学校 179 终于决定在足球场上建造一个屋顶。其建设需要放置 nn 个连续的垂直柱子。此外,校长要求所有柱子的高度构成一个 00n1n-1 的整数的排列 pp,其中 pip_i 表示从左到右第 ii 个柱子的高度(1in1 \le i \le n)。

作为负责人,你知道相邻柱子的建设成本等于所有相邻柱子高度按位异或的最大值。换句话说,建设成本等于 $\max\limits_{1 \le i \le n - 1}{p_i \oplus p_{i + 1}}$,其中 \oplus 表示按位异或运算

请你找出任意一种长度为 nn 的柱子高度排列 pp,使得建设成本最小。

在本题中,排列是指由 nn00n1n-1 的不同整数组成的数组,顺序任意。例如,[2,3,1,0,4][2,3,1,0,4] 是一个排列,但 [1,0,1][1,0,1] 不是排列(11 在数组中出现了两次),[1,0,3][1,0,3] 也不是排列(n=3n=3,但 33 在数组中)。

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。接下来每组测试用例包含一行,一个整数 nn2n21052 \le n \le 2 \cdot 10^5),表示建造屋顶所需的柱子数量。

保证所有测试用例中 nn 的总和不超过 21052 \cdot 10^5

输出格式

对于每组测试用例,输出 nn 个整数 p1,p2,,pnp_1, p_2, \ldots, p_n,表示使建设成本最小的柱子高度排列。

如果有多种答案,输出任意一种均可。

说明/提示

对于 n=2n=2,有 22 种柱子高度排列:

  • [0,1][0, 1] —— 建设成本为 01=10 \oplus 1 = 1
  • [1,0][1, 0] —— 建设成本为 10=11 \oplus 0 = 1

对于 n=3n=3,有 66 种柱子高度排列:

  • [0,1,2][0, 1, 2] —— 建设成本为 max(01,12)=max(1,3)=3\max(0 \oplus 1, 1 \oplus 2) = \max(1, 3) = 3
  • [0,2,1][0, 2, 1] —— 建设成本为 max(02,21)=max(2,3)=3\max(0 \oplus 2, 2 \oplus 1) = \max(2, 3) = 3
  • [1,0,2][1, 0, 2] —— 建设成本为 max(10,02)=max(1,2)=2\max(1 \oplus 0, 0 \oplus 2) = \max(1, 2) = 2
  • [1,2,0][1, 2, 0] —— 建设成本为 max(12,20)=max(3,2)=3\max(1 \oplus 2, 2 \oplus 0) = \max(3, 2) = 3
  • [2,0,1][2, 0, 1] —— 建设成本为 max(20,01)=max(2,1)=2\max(2 \oplus 0, 0 \oplus 1) = \max(2, 1) = 2
  • [2,1,0][2, 1, 0] —— 建设成本为 max(21,10)=max(3,1)=3\max(2 \oplus 1, 1 \oplus 0) = \max(3, 1) = 3

由 ChatGPT 4.1 翻译

样例

4
2
3
5
10
0 1
2 0 1
3 2 1 0 4
4 6 3 2 0 8 9 1 7 5

在线编程 IDE

建议全屏模式获得最佳体验