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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值