http://poj.org/problem?id=2309
//找规律 可以看到每个根节点都可以将其在同一层的最左边的根节点整除,并且最大值为该节点加上最左边的节点值-1,最小值为////为该节点减去最左边的节点值-1
1 #include <iostream>
2 #include<cmath>
3 using namespace std;
4
5 int main()
6 {
7 long long s[35];
8 s[0] =1;
9 for(int i=1;i<=31;i++)
10 s[i] = s[i-1]<<1;
11 int t,n;
12 cin>>t;
13 while(t--){
14 cin>>n;
15 if(n%2){
16 cout<<n<<" "<<n<<endl;
17 continue;
18 }
19 int j;
20 for(j=31;j>=0;j--)
21 if(n%s[j]==0)
22 break;
23 int bet = s[j]-1;
24 cout<<n-bet<<" "<<n+bet<<endl;
25
26 }
27 return 0;
28 }