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 200 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 #include2sumusing
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 }
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 但是,這種方法很顯然比較費時,不夠優,所以有了今天要講的區間更新。懶惰標記 在講之前...