二维树状数组

  二维树状数组用来更新矩阵,写法跟一维的很类似。每次增加i&(-i)的值,不过这里增加的是矩阵的横纵下标;写法如下:

void add(int x, int y, int d) {
    int i, j;
    for(i = x; i < N; i += lowbit(i))
        for(j = y; j < N; j += lowbit(j))
            mat[i][j] += d;
}

LL sum(int x, int y) {
    LL res = 0;
    int i, j;
    for(i = x; i > 0; i -= lowbit(i))
        for(j = y; j > 0; j -= lowbit(j))
            res += mat[i][j];
    return res;
}

练习: poj 1195

ps:只要是树状数组都要注意的一点,add时下标不能为0,否则死循环!

 

 

 

 

 

 

 

 

 

 

posted @ 2012-04-30 23:00  AC_Von  阅读(2047)  评论(0编辑  收藏  举报