POJ 2309 BST
2016-02-16 13:10
267 查看
题目链接:http://poj.org/problem?id=2309
题意:好的,让我们来用一下原图,就是这样一个二叉树,给你一个节点,让你求这个节点和其子节点中,编号最大的和最小的,比如求12的就是 9和15。
思路:
让我们先把这些编号用二进制来表示。
找一下规律,发现每个数在第几层是由它后面有几个0决定的
而且一个节点在范围内属于中间的那个数,左右两边节点数量相等,而且分别都小于或大于根结点。
我们可以用树状数组的lowbit来求一下假设lowbit(x) = k;
可以发现左右子树的节点个数都是k-1,那么x-(k-1)就是最小的,x+(k-1)就是最大的。
题意:好的,让我们来用一下原图,就是这样一个二叉树,给你一个节点,让你求这个节点和其子节点中,编号最大的和最小的,比如求12的就是 9和15。
思路:
让我们先把这些编号用二进制来表示。
找一下规律,发现每个数在第几层是由它后面有几个0决定的
而且一个节点在范围内属于中间的那个数,左右两边节点数量相等,而且分别都小于或大于根结点。
我们可以用树状数组的lowbit来求一下假设lowbit(x) = k;
可以发现左右子树的节点个数都是k-1,那么x-(k-1)就是最小的,x+(k-1)就是最大的。
#include <iostream> using namespace std; int n; int lowbit(int x) { return x&(-x); } int main() { int t; cin>>n; while(n--) { cin>>t; cout<<t-lowbit(t)+1<<" "<<t+lowbit(t)-1<<endl; } return 0; }
相关文章推荐
- Dubbo
- Android NDK打印日志
- 操作系统之中断(四)
- 基于yarn的Hadoop调优
- 蓝桥杯--算法提高 我们的征途是星辰大海 (模拟)
- java基础-----2Java 发展简史
- 省电的iPhone定位
- 北京Uber优步司机奖励政策(2月16日)
- 【转】opencart 源码解析
- [LeetCode 001] Two Sum
- Leetcode Problem 1: Two sum
- oracle表空间使用率统计查询
- 最大公约数与最小公倍数
- 【C++基础之二十】可变参数的函数
- 滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(2月16日)
- gns3 1.4.1 iou虚拟asa,ids
- Windows命令行bat批处理延迟sleep方法(批处理延时)
- Linux中读取目录: opendir,fdopendir,readdir,rewinddir,closedir,telldir,seekdir
- 在指定的CEF线程上执行任务
- Javascript并发模型和事件循环