Node query(int u, int l, int r)
{
if (tr[u].l >= l && tr[u].r <= r) return tr[u];
else
{
int mid = tr[u].l + tr[u].r >> 1;
if (r <= mid) return query(u << 1, l, r); // 左子树
else if (l > mid) return query(u << 1 | 1, l, r); // 右子树
else // 在左右两边
{
auto left = query(u << 1, l, r);
auto right = query(u << 1 | 1, l, r);
Node res;
pushup(res, left, right);
return res;
}
}
}
看不懂这两行的 if 判断,有大佬能讲一下吗。
if (r <= mid) return query(u << 1, l, r); // 左子树
else if (l > mid) return query(u << 1 | 1, l, r); // 右子树