给定一棵有 2n−1 个节点的二叉树,节点的编号为 1,2,⋯,2n−1。
编号为 p 的节点(下称节点 p)有两个给定的整数属性值 Lp,Rp,满足 Lp≤Rp。
该二叉树还满足以下性质:
- 节点 1 是根,L1=1,R1=n。
- 对于任意一个节点 p:
- 若 Lp=Rp,则节点 p 没有子节点。
- 若 Lp<Rp,则节点 p 有两个子节点。在这里,我们区分左右子节点。设节点 p 的左子节点是 u,右子节点是 v,有 Lu=Lp 且 Ru+1=Lv 且 Rv=Rp。
我们称这样的树为广义线段树。
对于任意区间 [l,r] 满足 l,r 均为整数且 1≤l≤r≤n,考虑以下算法:
function visit(p,l,r,id)12345678910if r<Lp or Rp<lreturncnt1[id]←cnt1[id]+1cnt2[p]←cnt2[p]+1if l≤Lp and Rp≤rreturnu←left child of pv←right child of pvisit(u,l,r,id)visit(v,l,r,id)
给定 m 个区间 [li,ri](i=1,2,⋯,m),对于每个 i 都执行 visit(1,li,ri,i) 恰好一次。数组 cnt1(下标为 1,2,⋯,m)和 cnt2(下标为 1,2,⋯,2n−1)的所有元素初始时均为 0,求它们最终的值。