思路:除以2^k,找到商为奇数的位置,k为层数,有2^(k+1)-1个节点
这里直接用位运算,x & -x 就求出 2^k 了。
#include<iostream>
using namespace std;
long lowbit(long x)
{
return x & -x;
}
int main()
{
long n,x;
cin>>n;
while(n--)
{
cin>>x;
cout<<x-lowbit(x)+1<<' '<<x+lowbit(x)-1<<endl;
}
return 0;
}