树状数组简述
Posted qmcp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树状数组简述相关的知识,希望对你有一定的参考价值。
树状数组是一种单点修改并查询前缀和的数据结构
查询和修改时间复杂度都是log(n)
对于树状数组我们首先需要知道lowbit的概念
lowbit即是x & -x
通俗点是一个数二进制下的从后往前数第一个1所对应的值
具体算法的话就是两个
一个是修改函数如下
void add(int pos, int w)
{
while(pos <= n)
{
c[pos]+=w;
pos+=lowbit(pos);
}
}
一个是查询如下
int sum(int pos)
{
int ret = 0;
while (pos > 0)
{
ret+=c[pos];
pos-=lowbit(pos);
}
return ret;
}
很好写也易于理解
我第一次自己写的时候初始赋值错了导致初始化复杂度过大
可以初始赋值的时候就使用add( i , a[i] )
以上是关于树状数组简述的主要内容,如果未能解决你的问题,请参考以下文章