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 }