| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 8565 | Accepted: 5202 |
Description

Input
Output
Sample Input
2 8 10
Sample Output
1 15 9 11
Source
lowbit的作用,计算x对应的二进制数中第一个1的位置k,返回权值2k。
这个函数的作用就是求出t这个数的二进制存储下,最高的非0bit所表示的大小。 即满足2^k<=t的最大的2^k,其中k为非负整数。
1、min和max为奇数,否则min和max非叶子,还可以向下拓展
2、根据满二叉树的性质,x的左右子树的个数都为2的k次方减1个节点
3、根据二叉树搜索的性质,左子树编号的区间为[min,x-1],右子树的编号区间为[x+1,max]
由此得出min=x-(2^k-1),max=x+(2^k-1)
#include <iostream>
using namespace std;
int lowbit(int x)
{
return x&(-x);
}
int main()
{
int N;
cin>>N;
int c;
for(c=1;c<=N;c++)
{
int n;
cin>>n;
int min,max;
min=n-lowbit(n)+1;
max=n+lowbit(n)-1;
cout<<min<<" "<<max<<" "<<endl;
}
return 0;
}
原文:http://blog.csdn.net/sunshumin/article/details/38372811