二维树状数组

/*
单点修改,查询的复杂度都为log(n) * log(n)
*/
int sum[maxn][maxn];
int n;
char c;
inline int lowbit(int x)
{
    return x & (-x);
}
//其中n为点的总数,向上更新树状数组
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))
        {
            sum[i][j] += val;
        }
    }
}
//求(1,1)到(x,y)所有点包含的总和
int query(int x,int y)
{
    int now = 0;
    for(int i = x;i >= 1;i -= lowbit(i))
    {
        for(int j = y;j >= 1;j -= lowbit(j))
        {
            now += sum[i][j];
        }
    }
    return now;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章