#801. 最大的和

最大的和

题目描述

给定 TT 组询问。每组询问给出一个非负整数 nn,要求在区间 [0,n][0,n] 内选取两个整数 a,ba,b,满足

a⊕b=na\oplus b = n

(⊕\oplus 表示按位异或运算),使得 a+ba+b 尽可能大。请输出每组询问的最大可能值。

输入格式

输入包含多组测试数据:

  • 第一行包含整数 TT,表示询问组数。
  • 接下来 TT 行,每行包含一个整数 nn(0≤n≤231−10\le n\le 2^{31}-1),表示当前询问的参数。

输出格式

对于每组询问,输出一行,包含一个整数 —— 在约束下能取得的最大 a+ba+b 值。

样例输入

6
1
2
3
4
5
6

样例输出

1
2
3
4
5
8

说明

样例解释

样例中共有 66 组询问:

  • 对于 n=1,2,3,4,5n=1,2,3,4,5,可以取 a=0,b=na=0,b=n,得到 a+b=na+b=n;
  • 对于 n=6n=6,可以取 a=3,b=5a=3,b=5(3⊕5=63\oplus5=6),此时 a+b=8a+b=8,可以证明这是最大的取值。

数据范围

对所有数据,满足

  • 1≤T≤1061\le T\le 10^6,
  • 0≤n≤231−10\le n\le 2^{31}-1。
子任务 TT nn
11 ≤10\le 10 ≤24−1\le 2^4-1
2∼32 \sim 3 ≤200\le 200 ≤28−1\le 2^8-1
4∼74 \sim 7 ≤105\le 10^5 ≤216−1\le 2^{16}-1
8∼138 \sim 13 ≤200\le 200 ≤231−1\le 2^{31}-1
14∼2014 \sim 20 ≤106\le 10^6