POJ 2309 BST

来源:互联网 发布:软件招聘网 编辑:程序博客网 时间:2024/05/18 18:14

假设最下面一层为第一层,可以看到,第一层全部为奇数,分解质因数后2的个数为0,依次向上,分解质因数后2的个数分别为1.2.3.4...而第N层的数与该数最左边和最右边的数的差都是2的N-1次方-1 ,所以该题就是求分解质因数后2的个数就可以了。

一开始是用依次除2的方法求的,后来超时了,突然想到了树状数组中求lowbit的方法,直接n&(-n)就得到结果了。

#include <cstdio>#include <math.h>using namespace std;int main(){int nCase;scanf("%d",&nCase);while(nCase--){int n;scanf("%d",&n);int k=n&(-n);k--;printf("%d %d\n",n-k,n+k);}return 0;} 


原创粉丝点击