題目描述
如題,已知乙個數列,你需要進行下面兩種操作:
1.將某區間每乙個數數加上x
2.求出某乙個數的和
輸入格式:
第一行包含兩個整數n、m,分別表示該數列數字的個數和操作的總個數。
第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。
接下來m行每行包含2或4個整數,表示乙個操作,具體如下:
操作1: 格式:1 x y k 含義:將區間[x,y]內每個數加上k
操作2: 格式:2 x 含義:輸出第x個數的值
輸出格式:
輸出包含若干行整數,即為所有操作2的結果。
輸入樣例#1:
5 51 5 4 2 3
1 2 4 2
2 31 1 5 -1
1 3 5 7
2 4
1 #include2#define maxn 1000007
3using
namespace
std;45
intn,m;
6int
c[maxn],a[maxn];78
int lowbit(intk)9
12void update(int k,int
num)
1320
return;21
22}23int sum(int
k)24
31return
ans;32}
3334
intmain()
3545
intt1,t2,t3,t4;
4647
for(int i=1;i<=m;i++)
4852
if(t1==2
)53 54}
55return0;
56 }
樹狀陣列區間更新 單點查詢
設a陣列表示原來的區間 c i a i a i 1 這樣可以看出 a i sum c 1 c 2 c i 例如 a 1 3 4 2 6 8 c 1 2 1 2 4 2 樹狀陣列維護的是c陣列 當把a 3,5 每個數都加2時,我們看c陣列,由於c陣列維護的是相鄰區間的差值,所以c 3 2 因為區間 3...
樹狀陣列 單點更新 區間查詢
input 每組測試用例首先一行是2個正整數n和m n 100000,m 10000 其中,n表示士兵的數量,m表示有m個詢問。接下來一行是n個正整數,依次表示n位士兵cf的rating。其中,rating的取值範圍是小於等於5000。最後是m行的詢問,每行包含2個正整數a和b,表示要計算從第a個士...
hdu1556 樹狀陣列 一維 區間更新 單點查詢
這題可以說是樹狀陣列區間更新,單點查詢的模板題。對於樹狀陣列的區間更新,單點查詢,其實就是維護乙個差分陣列。以該題為例 定義兩個陣列a,b。a陣列表示氣球塗色次數,初始均為0。設b n a n a n 1 即b陣列是a陣列的乙個差分陣列 因為a陣列初始均為0,所以b陣列初始也為0,且b 1 b 2 ...