線段樹之sum

2022-08-05 13:09:11 字數 1457 閱讀 9096

time limit: 1 sec  memory limit: 128 mb

submit: 54  solved: 47

[submit][status][web board][edit] [testdata]

給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。 

輸入資料第一行包含兩個正整數n,m(n<=100000,m<=500000),以下是m行, 

每行有三個正整數k,a,b(k=0或1, a,b<=n).

k=0時表示將a處數字加上b,k=1時表示詢問區間[a,b]內所有數的和。

對於每個詢問輸出對應的答案。

10 20

0 1 10

1 1 4

0 6 6

1 4 10

1 8 9

1 4 9

0 10 2

1 1 8

0 2 10

1 3 9

0 7 8

0 3 10

0 1 1

1 3 8

1 6 9

0 5 5

1 1 8

0 4 2

1 2 8

0 1 1

1060

616624

1450

41

最簡單的線段樹

1 #include2

using

namespace

std;

3int

ans;

4struct

segment_tree

13int mid=(l+r)/2;14

if(a<=mid)

15 update(num*2

,l,mid,a,b);

16if(a>mid)

17 update(num*2+1,mid+1

,r,a,b);

18 tree[num]=tree[num*2]+tree[num*2+1

];19}20

void query(int num,int l,int r,int a,int

b)21

27if(l>=a && r<=b)

2832

int mid=(l+r)/2;33

if(a<=mid)

34 query(num*2

,l,mid,a,b);

35if(b>mid)

36 query(num*2+1,mid+1

,r,a,b);

37return;38

}39}s;40

intmain()

4155}56

return0;

57 }

sum

hdu4288 線段樹維護多個sum

題意 給n個有序的數字,三個操作 1 刪除數字x 2 增加數字x 3 求i 5 3的數字之和 i為數字的下標 思路 一開始想水一下,結果超時。先對所有輸入的數字離散化,線段樹維護區間上點的個數和5個sum值,區間合併的時候要注意 左兒子節點和父親節點的關係很容易,右兒子合併的時候與左兒子中的點個數有...

牛客14269 sum 線段樹 數字

考慮維護乙個這樣的問題 1 給出乙個陣列a,標號為1 n 2 修改陣列中的乙個位置。3 詢問區間 l,r 中所有子集的位運算and之和mod 109 7 位運算and即為 pascal中的and 和 c c 中的 我們定義集合s 若集合t,t s t,則稱t為s的子集 設f t at1 and at...

線段樹之區間更新線段樹

在學習區間更新線段樹之間要先學習單點更新線段樹。情景引入 給乙個長度為n的陣列a,隨機修改區間陣列元素 a l a r 的值,然後求任意區間和。修改操作我們可以想到 for int i l i r i update 但是,這種方法很顯然比較費時,不夠優,所以有了今天要講的區間更新。懶惰標記 在講之前...