二维树状数组

二维树状数组:同样不要忘记c的初始化,modify 的功能是改变元素(x, y),sum的功能则是求从元素(1, 1)开始到(x, y)的总和,同样,可以求出任意一个子矩阵内的所有元素之和,即sum(x2, y2) - sum(x1-1, y2) - sum(x2, y1-1) + sum(x1-1, y1-1)

int lowbit( int  x )
{
return x&(-x);
}

void modify( int  x, int  y, int delta )
{
inti,j;
for(i=x; i<=N; i+=lowbit(i))
{
for(j=y; j<=N; j+=lowbit(j))
{
c[i][j]+=delta;
}
}
}

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

posted @ 2012-11-22 16:01  紫忆  阅读(158)  评论(0编辑  收藏  举报