码迷,mamicode.com
首页 > 其他好文 > 详细

POJ2309 -- BST

时间:2015-05-05 15:57:04      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:

找找规律,实际上是二分查找的过程,只要找到了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 }
View Code

 

POJ2309 -- BST

标签:

原文地址:http://www.cnblogs.com/castlehappiness/p/4479100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!