码迷,mamicode.com
首页 > 编程语言 > 详细

树状数组模板

时间:2017-02-12 23:50:51      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:区间查询   set   pre   区间   tree   max   query   树状   blog   

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

//树状数组 单点修改 区间查询 
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);
}

 

树状数组模板

标签:区间查询   set   pre   区间   tree   max   query   树状   blog   

原文地址:http://www.cnblogs.com/itlqs/p/6392051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!