题目描述
给定 T 组询问。每组询问给出一个非负整数 n,要求在区间 [0,n] 内选取两个整数 a,b,满足
a⊕b=n
(⊕ 表示按位异或运算),使得 a+b 尽可能大。请输出每组询问的最大可能值。
输入格式
输入包含多组测试数据:
- 第一行包含整数 T,表示询问组数。
- 接下来 T 行,每行包含一个整数 n(0≤n≤231−1),表示当前询问的参数。
输出格式
对于每组询问,输出一行,包含一个整数 —— 在约束下能取得的最大 a+b 值。
样例输入
6
1
2
3
4
5
6
样例输出
1
2
3
4
5
8
说明
样例解释
样例中共有 6 组询问:
- 对于 n=1,2,3,4,5,可以取 a=0,b=n,得到 a+b=n;
- 对于 n=6,可以取 a=3,b=5(3⊕5=6),此时 a+b=8,可以证明这是最大的取值。
数据范围
对所有数据,满足
- 1≤T≤106,
- 0≤n≤231−1。
| 子任务 |
T |
n |
| 1 |
≤10 |
≤24−1 |
| 2∼3 |
≤200 |
≤28−1 |
| 4∼7 |
≤105 |
≤216−1 |
| 8∼13 |
≤200 |
≤231−1 |
| 14∼20 |
≤106 |