CF1742G Orray

题目描述

给定一个由 $n$ 个非负整数组成的数组 $a$。 我们定义前缀 OR 数组 $b$ 为 $b_i = a_1~\mathsf{OR}~a_2~\mathsf{OR}~\dots~\mathsf{OR}~a_i$,其中 $\mathsf{OR}$ 表示[按位或运算](https://en.wikipedia.org/wiki/Bitwise_operation#OR)。换句话说,数组 $b$ 是通过计算 $a$ 的每个前缀的按位或得到的。 你的任务是重新排列数组 $a$ 的元素,使得其前缀 OR 数组在字典序上最大。 如果在第一个不同的位置 $x$ 和 $y$ 满足 $x_i > y_i$,则数组 $x$ 在字典序上大于数组 $y$。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 100$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^5$),表示数组 $a$ 的长度。 每个测试用例的第二行包含 $n$ 个非负整数 $a_1, \ldots, a_n$($0 \leq a_i \leq 10^9$)。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出 $n$ 个整数,表示数组 $a$ 的任意一种重排方式,使得其前缀 OR 数组在字典序上最大。

说明/提示

由 ChatGPT 4.1 翻译