二維樹狀數組

/*
單點修改,查詢的複雜度都爲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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章