树状数组
树状数组
树状数组 前缀和、修改一个元素的时间复杂度均为O(logn), 适合需要频繁进行区间和查询的情况
C++实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int a[500001];
inline int lowbit(int x)
{
return x&(-x);
}
void up(int x,int val)
{
for(; x<=maxn; x+=lowbit(x)) a[x]+=val;
}
int _sum(int x)
{
int sum=0;
for(; x>0; x-=lowbit(x)) sum+=a[x];
return sum;
}
本文由作者按照 CC BY 4.0 进行授权