文章

树状数组

树状数组

树状数组 前缀和、修改一个元素的时间复杂度均为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 进行授权