树状数组模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树状数组模板相关的知识,希望对你有一定的参考价值。

看了很多讲解仍然不明就里,感觉反正代码很短,暂时当模板背过好了。

//树状数组 单点修改 区间查询 
const int maxn=1005;
int tree[maxn],n;

void init() { for (int i=1;i<=n;i++) tree[i]=0; }  //初始化一个长度为n的树状数组,n为全局变量 
int lowbit(it k) { return k&-k; }
void add(int k,int x)  //给位置k加x 
{
    while (k<=n)
    {
        tree[k]+=x;
        k+=lowbit(k);
    }
}
int querysum(int k)  //查询[1,k]的前缀和 
{
    int sum=0;
    while (k>0)
    {
        sum+=tree[k];
        k-=lowbit(k);
    }
    return sum;
}
void setvalue(int k,int x)  //把位置k置为x
{
    int t=query(k)-query(k-1);
    add(k,-t);
    add(k,x);
}

 

以上是关于树状数组模板的主要内容,如果未能解决你的问题,请参考以下文章

树状数组模板

树状数组2模板 Luogu 3368

树状数组1模板 Luogu 3374

模板树状数组

模板树状数组

P3372 模板线段树 1(区间修改区间查询)(树状数组)