在学习逆序数计算的时候,看到了用树状数组来计算,树状数组是一种数据结构,和并查集的概念类似。
定义完一个数组后,再定义三个函数操作,从而变成树状数组。使得 一个数组改变某个元素和求和两种操作都是O(logn)
http://www.cppblog.com/Ylemzy/articles/98322.html
//求最小幂2^k:
int Lowbit(int t)
{
return t & ( t ^ ( t - 1 ) );
}
//求前n项和:
int Sum(int end)
{
int sum = 0;
while(end > 0)
{
sum += in[end];
end -= Lowbit(end);
}
return sum;
}
// 对某个元素进行加法操作:
void plus(int pos , int num)
{
while(pos <= n)
{
in[pos] += num;
pos += Lowbit(pos);
}
}