码迷,mamicode.com
首页 > 编程语言 > 详细

Luogu【模板】树状数组

时间:2018-02-18 21:56:24      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:scanf   oid   scan   col   ast   模板   using   can   last   

https://www.luogu.org/problemnew/show/P3374

单点修改, 区间查询

 1 //2018年2月18日17:58:16
 2 #include <iostream>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int N = 500001;
 7 int n, m;
 8 int a[N], c[N];
 9 
10 inline int lowbit(int x){
11     return x & (-x);
12 }
13 void add(int x, int k){
14     for(int i=x;i<=n;i+=lowbit(i)) c[i] += k; 
15 }
16 
17 int sum(int x){
18     int res = 0;
19     for(int i=x; i; i-=lowbit(i)) res += c[i];
20     return res;
21 }
22 
23 int main(){
24     scanf("%d%d", &n, &m);
25     for(int i=1;i<=n;i++){
26         scanf("%d", &a[i]);
27         add(i, a[i]);
28     }
29     for(int i=1;i<=m;i++){
30         int opt, x, k;
31         scanf("%d%d%d", &opt, &x, &k);
32         if(opt == 1){
33             add(x, k);
34         }else if(opt == 2){
35             printf("%d\n", sum(k)-sum(x-1)); 
36         }
37     }
38     
39 
40     return 0;
41 }

https://www.luogu.org/problemnew/show/P3368

区间修改, 单点查询

 

 1 //2018年2月18日21:10:31
 2 #include <iostream>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int N = 500001;
 7 int n, m;
 8 int c[N], last;
 9 int opt, x, y, k;
10 
11 inline int lowbit(int x){
12     return x & (-x);
13 }
14 
15 void add(int x, int k){
16     for(int i=x; i<=n; i+=lowbit(i)) c[i] += k;
17 }
18 
19 int sum(int x){
20     int res = 0;
21     for(int i=x; i; i-=lowbit(i)) res += c[i];
22     return res;
23 }
24 
25 int main(){
26     scanf("%d%d", &n, &m);
27     for(int i=1;i<=n;i++){
28         scanf("%d", &x);
29         add(i, x-last);
30         last = x;
31     }
32     for(int i=1;i<=m;i++){
33         scanf("%d", &opt);
34         if(opt == 1){
35             scanf("%d%d%d", &x, &y, &k);
36             add(x, k);
37             add(y+1, -k);
38         }else if(opt == 2){
39             scanf("%d", &x);
40             printf("%d\n", sum(x));
41         }
42     }
43     
44     return 0;
45 }

 

Luogu【模板】树状数组

标签:scanf   oid   scan   col   ast   模板   using   can   last   

原文地址:https://www.cnblogs.com/sineagle/p/8453222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!