模板——树状数组,单点查询,单点/区间修改

  单点修改的题目为洛谷3374 树状数组模板一,其实和CodeVS 的线段树练习1 只有n和m的输入顺序和数据范围不一样。

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<vector>
 7 #include<cstdio>
 8 #include<stack>
 9 #include<queue>
10 #include<cmath>
11 #include<map>
12 #include<set>
13 using namespace std;
14 const int N=500100;
15 int n,m,val[N],t[N];
16 void update(int x,int v){
17     while(x<=n){
18         t[x]+=v;
19         x+=x&(-x);
20     }
21 }
22 int getsum(int x){
23     int res=0;
24     while(x>=1){
25         res+=t[x];
26         x-=x&(-x);
27     }
28     return res;
29 }
30 int main(){
31     cin>>n>>m;
32     for(int i=1;i<=n;i++){
33         scanf("%d",val+i);
34         update(i,val[i]);
35     }
36     while(m--){
37         int p,x,y;scanf("%d%d%d",&p,&x,&y);
38         if(p==1){
39             val[x]+=y;
40             update(x,y);
41         }
42         else if(p==2)
43             printf("%d\n",getsum(y)-getsum(x-1));
44     }
45     return 0;
46 }
Problem_01

  洛谷 Yukikaze 616ms

  区间修改为洛谷3368 树状数组模板二。

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<string>
 6 #include<vector>
 7 #include<cstdio>
 8 #include<stack>
 9 #include<queue>
10 #include<cmath>
11 #include<map>
12 #include<set>
13 using namespace std;
14 const int N=500010;
15 int n,m,val[N],t[N];
16 void update(int x,int v){
17     while(x<=n){
18         t[x]+=v;
19         x+=x&(-x);
20     }
21 }
22 int sum(int x){
23     int res=0;
24     while(x>0){
25         res+=t[x];
26         x-=x&(-x);
27     }
28     return res;
29 }
30 int main(){
31     cin>>n>>m;
32     for(int i=1;i<=n;i++)scanf("%d",val+i);
33     while(m--){
34         int op;scanf("%d",&op);
35         if(op==1){
36             int x,y,v;scanf("%d%d%d",&x,&y,&v);
37             update(x,v);
38             update(y+1,-v);
39         }
40         else{
41             int x;scanf("%d",&x);
42             printf("%d\n",val[x]+sum(x));
43         }
44     }
45     return 0;
46 }
Problem_02

  洛谷 Yukikaze 592ms

posted @ 2017-08-17 21:37  Darkins  阅读(282)  评论(0)    收藏  举报