樹狀陣列例題1

2021-09-29 14:17:12 字數 1322 閱讀 2144

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

1.將某乙個數加上x

2.求出某區間每乙個數的和

第一行包含兩個整數n、m,分別表示該數列數字的個數和操作的總個數。

第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。

接下來m行每行包含3個整數,表示乙個操作,具體如下:

操作1: 格式:1 x k 含義:將第x個數加上k

操作2: 格式:2 x y 含義:輸出區間[x,y]內每個數的和

輸出包含若干行整數,即為所有操作2的結果。

5 51 5 4 2 3

1 1 3

2 2 5

1 3 -1

1 4 2

2 1 4

1416

時空限制:1000ms,128m

資料規模:

對於30%的資料:n<=8,m<=10

對於70%的資料:n<=10000,m<=10000

對於100%的資料:n<=500000,m<=500000

#include

#define ll long long

#define maxn 500010

#define n 201

#define inf 0x3f3f3f3f

#define gtc() getchar()

using

namespace std;

template

<

class

t>

inline

void

read

(t &s)

while

(isdigit

(ch)

) s *

= w;

}template

<

class

t>

inline

void

write

(t x)

int n, m, t[maxn]

;inline

intlowbit

(int x)

inline

void

add(

int x,

int k)

}inline

intsum

(int x)

return ans;

}int

main()

for(

int i =

1; i <= m;

++i)

else

}return0;

}

樹狀陣列部分例題

poj 1037 給出n個星星的座標,如果乙個星星的左下方 包含正左和正下 有k顆星星,就說這顆星星是k級的,統計每個等級有多少個點。這題可用樹狀陣列,對於每個星星按y座標從小到大排序,相同y座標按x座標從小到大排序 題目中資料已經有序 輸入順序已排好序,那麼只要依次統計星星i之前x座標小於等於i....

樹狀陣列1 樹狀陣列入門

仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...

模板 樹狀陣列1

這篇是樹狀陣列模板1 主要內容有 1.將某數加上x 2.求某區間和 也就是說支援單點修改 關於樹狀陣列的部落格講解 見基本介紹 include include include using namespace std define in read typedef long long ll const ...