本文共 691 字,大约阅读时间需要 2 分钟。
我们考虑一个无限的二叉搜索树,其中节点上的数字依次为1,2,3,...。对于一个以X为根的子树,找到其最小值和最大值。如何处理这样的查询?
输入:2810
输出:1 159 11我们可以利用lowbit函数来解决这个问题。lowbit(x)返回x的二进制表示中最低有效位的值。通过分析,我们可以得出以下方法:
#include#include #include #include #include using namespace std;int lowbit(int x) { return x & (-x);}int main() { int n; scanf("%d", &n); for (int _ = 0; _ < n; ++_) { int x; scanf("%d", &x); int k = lowbit(x); printf("%d %d\n", x - k + 1, x + k - 1); }}
通过这种方法,我们可以高效地解决问题,适用于大范围的输入数据。
转载地址:http://tdxfk.baihongyu.com/