Problem
有一長度為 n 的都市地帶,每一次將會做區段的都市更新,將建築物都增加高度 v。
操作
- B X Y V : 將區間
[X, Y]
都增加 V 高度 - Q X : 詢問當前位置 X 的建築物高度為何
(題目中的圖示貌似有錯誤)
Sample Input
|
|
Sample Output
|
|
Solution
想要區間更新、單點查詢,有兩種方案 segment tree 附加懶操作、或者 binary indexed tree、最後是塊狀鏈表這幾種方式。這裡使用 binary indexed tree。雖然 binary indexed tree 原本的操作是單點修改,前綴總和查找。利用這一點完成區間修改的操作。
由於這一題還是單純的加法,那麼符合加法原則,當區間修改 B X Y V 時,相當於修改單點 Arr[X] += V,Arr[Y+1] -= V
,從前綴和 SUM[1...Z] = \sum Arr[i]
來看,保證只有區間 [X, Y]
的詢問增加了 V 值,其他保持不變。
單筆操作都是 O(log n)
|
|