首页 > 技术文章 > POJ2309 -- BST

castlehappiness 2015-05-05 14:40 原文

找找规律,实际上是二分查找的过程,只要找到了mid与输入的n相同的话,直接输出left和right就可以了。

代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 long long getroot(int n)
 5 {
 6     long long root = 2;
 7     while(root*2 <= n)
 8         root *= 2;
 9     return root;
10 }
11 
12 int main()
13 {
14     int T;
15     cin>>T;
16     while(T --)
17     {
18         long long n,root;
19         cin>>n;
20         root = getroot(n);
21         long long left = 1 , right = 2*root - 1;
22         long long mid = (left + right)/2;
23         while(mid != n)
24         {
25             if(mid > n) right = mid - 1;
26             if(mid < n) left = mid + 1;
27             mid = (right + left)/2;
28         }
29         
30         cout<<left<<" "<<right<<endl;
31         
32     }
33     return 0;
34 }

 

推荐阅读