数状数组

来源:互联网 发布:郭天祥51单片机书 编辑:程序博客网 时间:2024/06/11 22:22

这里写图片描述
一张图足以说明一起。
lowbit(k)=k&(-k); 把k 保留最右边的1,其余位全变0
sum[k]=c[n1]+c[n2]+…+c[k];
n i-1 = n i - lowbit(n i )
c[i]=a[i-lowbit[i]+1]+…+a[i];

对于才c[i]中 但i为奇数的时候 c[i]=a[i];
当为偶数的时候 从i-lowbit[i]+1 为开始到第i 位的和,
i-lowbit[i] 代表的是 去掉i 的最后一位1,(i的二进制形式)

在建立数状数组的时候 要有经过迭代 是迭代吗
用到公式 c[k]; k=k+lowbit(k); 一直到k大于整个原来数组的大小。

0 0