首页 > 其他 > 详细

poj 2309 BST 使用树状数组的lowbit

时间:2014-07-23 13:12:16      阅读:228      评论:0      收藏:0      [点我收藏+]

如果领悟了树状数组中的lowbit,这道题就是极其简单的,最底层都是奇数,用lowbit(x)寻找x的父亲,然后x的父亲-1就是最大数

至于lowbit是如何计算的嘛,寻找x的父亲,其实就是x+2^x的二进制末尾0的个数。

#include<iostream>
#include<stdio.h>
using namespace std;
typedef long long ll;
 ll lowbit(int x){
    return x&(-x);
}
int main(){
    ll n,a;
    cin>>n;
    while(n--){
        cin>>a;
        if(a%2!=0){
            cout<<a<<" "<<a<<endl;
        }
        else{
            ll max=a+lowbit(a)-1;
            ll min=a-(max-a);
            cout<<min<<" "<<max<<endl;
        }
    }
}

poj 2309 BST 使用树状数组的lowbit,布布扣,bubuko.com

poj 2309 BST 使用树状数组的lowbit

原文:http://blog.csdn.net/youngyangyang04/article/details/38060051

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!