二维树状数组

我感觉二维树状数组和而为线段树的思想差不多,都是在原来的基础上加了一个新的树状数组或者是线段树,代码量也不是那么的大。

然后我想找一个图的,但是在百度上面也没有找到什么好点的图,因为一维树状数组解决的是一个区间的和,那么我们每个数下面再加上一个树状数组,

那么我们解决的就是一个矩形区域的所有的数的和。我感觉很显然啊。

下面贴上代码:

int sum(int x,int y)
{
    int ret = 0;
    for(int i = x;i > 0;i -= lowbit(i))
        for(int j = y;j > 0;j -= lowbit(j))
            ret += c[i][j];
    return ret;
}
void add(int x,int y,int val)
{
    for(int i = x;i <= n;i += lowbit(i))
        for(int j = y;j <= n;j += lowbit(j))
            c[i][j] += val;
}

 

posted @ 2017-03-11 17:03  Heilce  阅读(233)  评论(0编辑  收藏  举报