今天學習了一下樹狀陣列,做乙個簡單總結。
樹狀陣列可分為兩種操作,
(1)修改單個點,統計區間和
一般為 向上修改(update1),向下統計(sum1)
(2)修改區間,統計單個點
一般為向下修改(update2),向上統計(sum2)
主要模板如下:
int c[n];
int lowbit(int x) //用於確定區間範圍
int sum1(int x)
return sm;
}int sum2(int x)}
二維樹狀陣列(修改點,統計區間)
const int max=1200;
int c[max][max];
int n;
int lowbit(int t)
int sum(int endx,int endy)
endx-=lowbit(endx);
}return sum;
}void add(int addx,int addy,int num)
addx+=lowbit(addx);}}
int getsum(int l,int b,int r,int t)
樹狀陣列總結
樹狀陣列的基本知識已經被各種大牛和菜鳥講到爛了,我就不多說了,下面給出基本操作的 假定原陣列為a 1.n 樹狀陣列b 1.n 考慮靈活性的需要,使用int a傳陣列。define lowbit x x x int sum int a,int x void update int a,int x,int...
樹狀陣列總結
樹狀陣列是對乙個陣列改變某個元素和求和比較實用的資料結構。兩中操作都是o logn 在解題過程中,我們有時需要維護乙個陣列的字首和s i a 1 a 2 a i 但是不難發現,如果我們修改了任意乙個a i s i s i 1 s n 都會發生變化。可以說,每次修改a i 後,調整字首和s在最壞情況下...
樹狀陣列總結
樹狀陣列適合單個元素經常修改而且還反覆要求部分的區間的和的情況。樹狀陣列的所有題線段樹都可以寫,但相對而言程式設計效率和程式執行效率更加高 c只是乙個求和工具 每個c i 最後乙個元素都是a i c i 中有lowbit i 個元素,所以c i 就是 a i lowbit i 1 a i 的和 c的...