树状数组的性质
树状数组与其树形态的性质
我们约定
- l(x)=x−lowbit(x)+1l(x)=x-lowbit(x)+1l(x)=x−lowbit(x)+1。即 l(x)l(x)l(x) 是 c[x]c[x]c[x] 管辖范围的左端点。
- 对于任意正整数 xxx,总能将 xxx 表示为 s×2k+1+2ks\times 2^{k+1}+2^ks×2k+1+2k,其中 lowbit(x)=2klowbit(x)=2^klowbit(x)=2k。
- c[x]c[x]c[x] 与 c[y]c[y]c[y] 不交,指的是 c[x]c[x]c[x] 的管辖范围和 c[y]c[y]c[y] 的管辖范围不相交,即 [l(x),x][l(x),x][l(x),x] 和 [l(y),y][l(y),y][l(y),y] 不相交。
性质1
对于 x≤yx\le yx≤y,要么有 c[x]c[x]c[x] 和 c[y]c[y]c[y] 不交,要么有 c[x]c[x]c[x] 包含于 c[y]c[y]c[y]。
证明
不妨假设 c[x]c[x]c[x] 与 c[y]c[y]c[y] 相交,即 [l(x),x][l(x),x][l(x),x] 与 [l(y),y][l(y),y][l(y),y],则一定有 l(y)≤x≤yl(y)\le x\le yl(y)≤x≤y。
又因为 y=s×2k+1+2ky=s\times2^{k+1}+2^ky=s×2k+1+2k,故 l(y)=y−lowbit(y)+1=s×2k+1+1l(y)=y-lowbit(y)+1=s\times 2^{k+1}+1l(y)=y−lowbit(y)+1=s×2k+1+1 。
又因为 x≥l(y)x\ge l(y)x≥l(y),所以 x=s×2k+1+bx=s\times 2^{k+1}+bx=s×2k+1+b,故 lowbit(x)=lowbit(b)lowbit(x)=lowbit(b)lowbit(x)=lowbit(b)。
因为 b≥lowbit(b)b\ge lowbit(b)b≥lowbit(b),所以 l(x)=x−low(b)+1=s×2k+1+b−lowbit(b)+1l(x)=x-low(b)+1=s\times 2^{k+1}+b-lowbit(b)+1l(x)=x−low(b)+1=s×2k+1+b−lowbit(b)+1。
所以 l(x)=l(y)+b−lowbit(b)≥l(y)l(x)=l(y)+b-lowbit(b)\ge l(y)l(x)=l(y)+b−lowbit(b)≥l(y)。
所以 l(x)l(x)l(x) 在 l(y)l(y)l(y) 的右边,则有不等式:l(y)≤l(x)≤x≤yl(y)\le l(x)\le x\le yl(y)≤l(x)≤x≤y。
故如果 c[x]c[x]c[x] 与 c[y]c[y]c[y] 相交,则 c[x]c[x]c[x] 包含与 c[y]c[y]c[y]。
性质2
c[x]c[x]c[x] 真包含于 c[x+lowbit(x)]c[x+lowbit(x)]c[x+lowbit(x)]。
证明
不妨假设 y=x+lowbit(x)y=x+lowbit(x)y=x+lowbit(x)。设 x=s×2k+1+2kx=s\times 2^{k+1}+2^kx=s×2k+1+2k,则 lowbit(x)=2klowbit(x)=2^klowbit(x)=2k,故 y=s×2k+1+2k+1y=s\times 2^{k+1}+2^{k+1}y=s×2k+1+2k+1。
若 sss 为奇数,则 y=(s+1)2×2k+2(t≥1)y=\frac{(s+1)}{2}\times 2^{k+2}(t\ge1)y=2(s+1)×2k+2(t≥1),故 lowbit(y)=2k+2lowbit(y)=2^{k+2}lowbit(y)=2k+2,若 sss 为偶数,则 lowbit(y)=2k+1lowbit(y)=2^{k+1}lowbit(y)=2k+1。
当 sss 为奇数,此时 l(y)=y−lowbit(y)+1=(s−1)22k+2+1=(s−1)×2k+1+1l(y)=y-lowbit(y)+1=\frac{(s-1)}{2}2^{k+2}+1=(s-1)\times 2^{k+1}+1l(y)=y−lowbit(y)+1=2(s−1)2k+2+1=(s−1)×2k+1+1,
l(x)=s×2k+1+1l(x)=s\times 2^{k+1}+1l(x)=s×2k+1+1,显然有 l(y)<l(x)≤x<yl(y)<l(x)\le x<yl(y)<l(x)≤x<y,即 c[x]c[x]c[x] 真包含于 c[x+lowbit(x)]c[x+lowbit(x)]c[x+lowbit(x)]。
当 sss 为偶数,此时 l(y)=y−lowbit(y)+1=(s−1)×2k+1+1l(y)=y-lowbit(y)+1=(s-1)\times 2^{k+1}+1l(y)=y−lowbit(y)+1=(s−1)×2k+1+1,显然有 l(y)<l(x)<x<yl(y)<l(x)<x<yl(y)<l(x)<x<y,即 c[x]c[x]c[x] 真包含于 c[x+lowbit(x)]c[x+lowbit(x)]c[x+lowbit(x)]。
性质3
对于任意 x<y<x+lowbit(x)x<y<x+lowbit(x)x<y<x+lowbit(x),有 c[x]c[x]c[x] 和 c[y]c[y]c[y] 不交。
证明
设 x=s×2k+1+2kx=s\times 2^{k+1}+2^{k}x=s×2k+1+2k,y=s×2k+1+2k+b=(2s+1)×2k+by=s\times 2^{k+1}+2^k+b=(2s+1)\times2^{k}+by=s×2k+1+2k+b=(2s+1)×2k+b,
则 lowbit(x)=2k,lowbit(y)=lowbit(b)lowbit(x)=2^k,lowbit(y)=lowbit(b)lowbit(x)=2k,lowbit(y)=lowbit(b)。
此时 l(x)=s×2k+1+1l(x)=s\times 2^{k+1}+1l(x)=s×2k+1+1,l(y)=x+b−lowbit(b)+1l(y)=x+b-lowbit(b)+1l(y)=x+b−lowbit(b)+1。
不难发现有 l(y)>xl(y)> xl(y)>x,所以 c[x]c[x]c[x] 和 c[y]c[y]c[y] 不交。
根据这三个性质,我们可以得到一个推论。
推论
如果 tree[i+x]tree[i+x]tree[i+x] 能够管辖到 iii,那么从 iii 开始一直加 lowbit(i)lowbit(i)lowbit(i) 必然能够到达 i+xi+xi+x。
证明
首先所有的 iii 跳 lowbitlowbitlowbit 能到达的位置,都能管辖到 iii。
又因为 tree[i+x]tree[i+x]tree[i+x] 能管辖到 iii,且不能被 iii 跳到,说明 tree[i+x]tree[i+x]tree[i+x] 是在 iii 的两个相邻祖先的中间。
又由性质 333,对于任意 x<y<x+lowbit(x)x<y<x+lowbit(x)x<y<x+lowbit(x),有 c[x]c[x]c[x] 和 c[y]c[y]c[y] 不交。
说明 i+xi+xi+x 必然不与 iii 的祖先有交集,但是 i+xi+xi+x 与 iii 的任意祖先都至少交于 iii,所以矛盾。
故 i+xi+xi+x 必然是 iii 的某个祖先,所以所有能管辖到 iii 的位置都是 iii 的祖先。