贪心 · 例12-兔子的区间密码
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}本题转译/翻译自 [牛客OI周赛8 - 普及组] 兔子的区间密码
\hspace{15pt}对于给定的区间 lr ,从中选择两个整数 xy ,使得他们异或后得到的值 x \oplus y 最大。输出这个最大值。
\hspace{15pt}你需要处理多组询问。

\hspace{15pt}其中,\oplus 表示按位异或运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入两个整数 l, r \left(0\leqq l\leqq r\leqq 10^{18}\right) 代表区间的左右端点。

输出描述:

\hspace{15pt}对于每一组测试数据,在一行上输出一个整数,代表能够得到的最大的 x\oplus y
示例1

输入

复制
5
2 3
1 10
3 4
5 5
2 5

输出

复制
1
15
7
0
7

说明

\hspace{15pt}在第一组测试数据中,一共有三种不同的选取方式:
\hspace{23pt}\bullet\,x=2y=2x \oplus y = 0
\hspace{23pt}\bullet\,x=2y=3x \oplus y = 1
\hspace{23pt}\bullet\,x=3y=3x \oplus y = 0
\hspace{15pt}综上,最大值为 1