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