赞
踩
考虑一个无限全二叉搜索树(见下图),节点中的数字为 1、2、3、.... 在根节点为 X 的子树中,我们可以通过重复从左边节点向下直到最后一层来得到子树中的最小数,我们也可以通过从右边节点向下找到最大数。现在给你一些查询,比如“在根节点为X的子树中,最小和最大数字是多少?”请设法找到这些问题的答案。
在输入中,第一行包含一个整数 N,它表示查询的数量。在接下来的 N 行中,每一行都包含一个数字,表示根号为 X (1<=X<=231−1
) 的子树。
总共有 N 行,第 i 行包含第 i 个查询的答案。
2
8
10
1 15
9 11
截止后通关代码:
#include <iostream>
#include <vector>
#include <map>
#include <set>
using namespace std;
int main()
{
int n;
int root;
cin>>n;
while (n--)
{
int k=1;
cin>>root;
int l,r;
l=root;
r=root;
int temp=1;
while (root%2==0)
{
root/=2;
l-=temp;
r+=temp;
temp*=2;
}
cout<<l<<" "<<r<<endl;
}
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。