字首和 與 樹狀陣列

2022-08-22 05:12:10 字數 749 閱讀 6853

通常情況下,樹狀陣列可用來處理單點修改區間查詢。通過字首和的轉換,可以使其處理區間修改和單點查詢

考慮原陣列和字首和陣列:

修改原陣列的某個點(i)              等價於      修改字首和陣列 的一條線段(1~i 都要修改)

查詢原陣列的某條線段(1~i)     等價於      查詢字首和陣列的乙個點(i)

這樣,適當地處理字首和陣列和原陣列,就可以轉化兩種問題。

通常情況下,對於a,我們會計算其字首和陣列b,但為了轉化問題,也可以把a看做b的字首和陣列。(這裡運用bit時就出現了所謂的 「  字首和的字首和 「)

附上樹狀陣列的模板:單點修改,區間查詢

一維(標準)

#define lowbit(i) ((i)&(-i))

struct

bit

void add(int x,int

val)

};

多維(擴充套件)

#define lowbit(i) ((i)&(-i))

struct

bit

void add(int x,int y,int

val)

};

使用時不要忘記初始化。初始化的方法就是把每個點都插入一遍。

還要注意bit查詢時的返回值是字首和。

字首 樹狀陣列

具體見 1 include 2 using namespace std 3 typedef long long ll 4 const int maxn 1e5 10 5 const int mod 1e9 7 6 define rep i,first,second for int i first i...

hdu 5147 樹狀陣列 字首和

題目 題目分析 要保證兩對數滿足前面的大於後面的,第一對數的下標中較大的小於第二對數中下標較大的,那麼我們可以利用字首和和字尾和的思想,先預處理算出每乙個數的字首中比它小的數的個數,再計算出字尾中比它大的個數,利用樹狀陣列可以快速求取,然後對前面的數取字首和,也就是以它為較大數的所有數對的個數,列舉...

字首和 差分 樹狀陣列 線段樹

字首和 應用 區間查詢,不涉及數的變化。求區間 l,r d的和 一維字首和 s i a 1 a 2 a i s i s i 1 a i 二維字首和 s i j 第 i 行第 j 列格仔左上部分所有元素的和 以 x1,y1 為左上角,x2,y2 為右下角 s x2,y2 s x2,y1 1 s x1 ...