# BIT **Binary Index Tree(線上演算法)** 用來計算前綴和 #### 單點修改: 不斷往大的找=>因為每一個點都會被上面的包覆 ```cpp= void update(int MAXN,int h,int add){ while(h<=MAXN){ tree[h]+=add; h=h+(h&-h); } } ``` #### 前綴查詢: 不斷往小的找=>計算前綴和 #注意:h要>0不然會無限循環,換句話說,BIT的索引值要從1開始 ```cpp= int query(int h){ int sum=0; while(h>0){ sum+=tree[h]; h=h-(h&-h); } return sum; } ``` ### 二維bit 在D維bit的每一個節點都還存有一顆D維的bit,可用來求 1. 小於x且小於y的前綴和query(x-1,y-1) 2. 小於等於x且小於y的前綴和query(x,y-1) 3. 小於x且小於等於y的前綴和query(x-1,y) 4. 小於等於x且小於等於y的前綴和query(x,y) #### 單點修改 ```cpp= void update(int x,int y){ while(x < MAXN){ int ty=y; while(ty < MAXN){ bit[x][ty]++; ty+=ty & -ty; } x+=x & -x; } } ``` #### 前綴查詢 ```cpp= int query(int x,int y){ int sum=0; while(x){ int ty=y; while(ty){ sum+=bit[x][ty]; ty-=ty & -ty; } x-=x & -x; } return sum; } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up