![](https://i-blog.csdnimg.cn/blog_migrate/d256767616c72653884bcc998150dab4.jpeg)
Input
In the input, the first line contains an integer N, which represents the number of queries. In the next N lines, each contains a number representing a subtree with root number X (1 <= X <= 2
31 - 1).
Output
There are N lines in total, the i-th of which contains the answer for the i-th query.
Sample Input
2 8 10
Sample Output
1 15 9 11
思路:这个我一开始就想到了树状数组,然后查看了树状数组的PPT,发现图形不太一样,但是求法一样,所以可以用。 x&(-x)为2^k的快速求解;设节点编号为x,那么这个节点管辖的区间为2^k(其中k为x二进制末尾0的个数)个元素。
#include <iostream> #include <map> #include <string> #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> using namespace std; int main() { int n,x; cin>>n; while(n--) { cin>>x; cout<<x-(x&(-x))+1<<' '<<x+(x&(-x))-1<<endl; } return 0; }