hdu1556 樹狀陣列 一維 區間更新 單點查詢

2021-07-31 20:34:58 字數 1294 閱讀 3110

這題可以說是樹狀陣列區間更新,單點查詢的模板題。

對於樹狀陣列的區間更新,單點查詢,其實就是維護乙個差分陣列。以該題為例:

定義兩個陣列a,b。a陣列表示氣球塗色次數,初始均為0。設b[n] = a[n] - a[n-1](即b陣列是a陣列的乙個差分陣列),因為a陣列初始均為0,所以b陣列初始也為0,且b[1]+b[2]+…+b[n] = a[n] - a[0] = a[n]。假設

這裡我們

要對區間

為[l,

r]的氣

球圖n次

色,也就

是對a[

]陣列的

[l,r

]區間都

加n。即

:a[1

]′=a

[1],

…,a[

l−1]

′=a[

l−1]

,a[l

]′=a

[l]+

n,…,

a[r]

′=a[

r]+n

,a[r

+1]′

=a[r

+1],

…那麼對

於b[1

],…,

b[l−

1],b

[l+1

],…,

b[r]

,b[r

+2],

…不會變

(區間外

部不變導

致b[1

−l]和

b[r+

2−n]

不變,區

間內部增

量相同導

致b[l

+1−r

]不變)

,但是b

[l]會

+n,b

[r+1

]會−n

。 這就轉變成了對b陣列的單點更新、區間查詢。

#include 

using

namespace

std;

const

int maxn = 1e5+5;

int sz[maxn],n;

int lowbit(int x)

int update(int x,int num)

}int query(int x)

return ans;

}int main()

for(int i=1;i<=n;i++) printf("%d%c",query(i),(i==n ? '\n' : ' '));

}return

0;}

HDU 1556樹狀陣列求解

f color the ball time limit 3000msmemory limit 32768kb64bit io format i64d i64u submit status practice hdu 1556 description n個氣球排成一排,從左到右依次編號為1,2,3.n....

樹狀陣列專題 六 hdu1556

這是屬於樹狀陣列的應用二.對一段區間進行修改.然後訪問點的更新值.如何對於一段區間 a,b 更新的情況updata a,1 updata b 1,1 的理解.因為是對於 a,b 區間內的更新.那麼只更新a是如何去理解呢.對於getsum i 得到的是1 i的總和.那麼updata a 以後.對於a ...

樹狀陣列 or 線段樹 (HDU 1556)

樹狀陣列 例題 hdu 1556 n個氣球排成一排,從左到右依次編號為1,2,3.n.每次給定2個整數a b a b lele便為騎上他的 小飛鴿 牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?...