首页 > 代码库 > POJ2309BST【树状数组的理解】

POJ2309BST【树状数组的理解】

大意:

对于这个树

告诉你一个节点问这个节点下的最小值和最大值

 

分析:

这个题考查对于树状数组的理解,   每个节点的前一个节点都是依次向前的 比如 10--8--4--2--1 后一个节点都是一次往后的比如10--12--16……

那么我们观察发现每个节点的最小值都是他爹+1,最大值都是他妈-1

 

代码:

 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5  6 int lowbit(int x) { 7     return x & ( - x ); 8 } 9 10 int main() {11     int n;12     int t;13     scanf("%d",&t);14     while(t--) {15         scanf("%d",&n);16         int n1 = n - lowbit(n);17         printf("%d", n1 + 1);18         int n2 = n + lowbit(n);19         printf(" %d\n", n2 - 1);20     }21 }
View Code

 

POJ2309BST【树状数组的理解】