poj 2309 BST 使用树阵lowbit

假设领悟了树阵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;
        }
    }
}

原文地址:https://www.cnblogs.com/zfyouxi/p/5027607.html