樹狀陣列基本模版 區間更新,單點查詢

2021-08-04 11:11:51 字數 994 閱讀 2887

題目描述

如題,已知乙個數列,你需要進行下面兩種操作:

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 5

1 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 ...