(1).一維樹狀陣列:一定要注意陣列c的初始化,n是陣列的大小,modify的功能是把第n個元素加上delta,
而sum的功能則是求從第乙個元素開始到第n個元素之和,當然也可以求一段區間上的和,
比如我要求第x個元素到第y個元素的和,答案就是sum(y) - sum(x - 1)
int lowbit( int n )
void modify( int n, int delta )
}int sum( int n )
return ret;
}
hdu1556:更新a,b的區間=update(a,n)-update(b+1,n);
hdu1166:注意c[n]初始化(0),與a[n]是不同的變數;
(2).二維樹狀陣列:同樣不要忘記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)
pku1195
int lowbit( int x )
void modify( int x, int y, int delta )}}
int sum( int x, int y )
}return res;
}
一維樹狀陣列和二維樹狀陣列
hdu1166敵兵布陣 樹狀陣列適用於頻繁對陣列元素進行修改,同時又要查詢陣列內任一區間元素之和。聽說線段樹也可以做,線段樹的作用 點修改,區間查詢,區間修改。include include include include using namespace std int a 50005 int c ...
(一維 二維)樹狀陣列模板
一維或二維的區間修改都用到了差分的思想 詳細講解 1.單點修改 區間查詢 int lowbit int x void add int x,int v 給x位置加上v int ask int x 求字首和 return ans int range ask int l,int r 2.區間修改 單點查詢...
從一維樹狀陣列到二維樹狀陣列
今天接觸二維樹狀陣列。其實,要明確的一點是,不管是一維還是二維樹狀陣列,都只是工具而已,只是幫助我們更快地求和,查詢,樹狀陣列的這些操作都可以用我們平常的方法求,例如一直加。面對乙個二維陣列,我們要求它們的和,會怎麼做呢?先求出第一行的總和 再求出第二行的總和 再求出第三行的總和 求出最後一行的總和...