這是一道模板題。
給定數列 a[1],a[2],…,a[n],你需要依次進行 qq 個操作,操作有兩類:
1 i x:給定 i,x,將 a[i] 加上 x;
2 l r:給定 l,r,求 ∑ri=la[i]的值(換言之,求 a[l]+a[l+1]+⋯+a[r] 的值)。
input
第一行包含 2 個正整數 n,q,表示數列長度和詢問個數。保證 1≤n,q≤106。
第二行 n 個整數 a[1],a[2],…,a[n]表示初始數列。保證 |a[i]|≤106。
接下來 q 行,每行乙個操作,為以下兩種之一:
1 i x:給定 i,x,將 a[i] 加上 x;
2 l r:給定 l,r,求 ∑ri=la[i] 的值。
保證 1≤l≤r≤n, |x|≤106。
output
對於每個 2 l r 操作輸出一行,每行有乙個整數,表示所求的結果。
example
樣例輸入
321
2312
0213
樣例輸出
6
hint
對於所有資料,1≤n,q≤106,1≤n,q≤106, |a[i]|≤106|a[i]|≤106, 1≤l≤r≤n,1≤l≤r≤n, |x|≤106|x|≤106。
題意·:
有乙個數列,讓你對該數列的某些數修改後,輸出區間中數的和
題解:線段樹模板題,對於乙個數列,將其中的數存入線段樹中,對於每乙個根節點,其值為左樹和右樹的和
比如數列 1,2,3,4,5,6,7,8,9,10;建成線段樹後為
其樹狀陣列儲存為55,15,40,6,9,21,19,3,3,4,5,13,8,9,10,1,2,0,0,0,0,0,0,6,7,0,0,0,0,0,0;
其中0是開了空間,但是並沒有賦值;
對於乙個根節點x,其左節點為x2,右節點為x2+1
**:
#include
"stdio.h"
int arr[
1000010];
long
long tree[
5000010];
void
build_tree
(int node,
int start,
int end)
//建樹
}void
update_tree
(int node,
int start,
int end,
int idx,
int val)
//單點修改
else
}long
long
query_tree
(int node,
int start,
int end,
int l,
int r)
//區間查詢
}int
main()
}}return0;
}
線段樹模板(單點修改 區間查詢)
1547 例 1 區間和 時間限制 1000 ms 記憶體限制 524288 kb 提交數 2072 通過數 639 題目描述 給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。輸入 輸入資料第一行包含兩個正整數n,m n 100000,m 500000 以下是m行,每行有三個正整數...
I Hate It 線段樹 單點修改 區間查詢
time limit 9000 3000 ms j a others memory limit 32768 32768 k j a others total submission s 40034 accepted submission s 15898 很多學校流行一種比較的習慣。老師們很喜歡詢問,從...
HDU1166 線段樹 單點修改區間查詢
c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工兵營地的人數都有可能發生...