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

树状数组2模板 Luogu 3368

时间:2017-08-21 19:38:47      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:names   space   区间   ase   ddn   iostream   scanf   div   修改   

树状数组区间修改&&**……*&%&……

好吧,我看了Running-coder的博客,久久才明白……

废话不多说:讲思路:无………………

 

代码:

 1  #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 using namespace std;
 6 int bit[1000000],n,m,d,p,xx,yy,kk;
 7 int lazy[1000000];
 8 int a[1000000];
 9 
10 void add(int i,int x){
11     while(i<=n){
12         bit[i]+=x;
13         i+=i & -i;
14     }
15 }
16 
17 void addn(int x,int y,int k){
18     while(y>=x){
19         lazy[y]+=k;
20         y -=y & -y;
21     }
22     x--;
23     while(x>y){
24         lazy[x]-=k;
25         x -=x& -x;
26     }
27 }
28 
29 int sum(int i){
30     int s=a[i];
31     while(i<=n){
32         s+=lazy[i];
33         i+=i & -i;
34     }
35     return s;
36 }
37 
38 int main(){
39     scanf("%d %d",&n,&m);
40     for(int j=1;j<=n;j++){
41         scanf("%d",&d);
42         add(j,d);
43         a[j]=d;
44     }
45     for(int j=1;j<=m;j++){
46         scanf("%d",&p);
47         switch (p){
48             case 1:{
49                 scanf("%d %d %d",&xx,&yy,&kk);
50                 addn(xx,yy,kk);
51                 break;
52             }
53             case 2:{
54                 scanf("%d",&xx);
55                 cout<<sum(xx)<<endl;
56                 break;
57             }
58         }
59     }
60     return 0;
61 }  

 

树状数组2模板 Luogu 3368

标签:names   space   区间   ase   ddn   iostream   scanf   div   修改   

原文地址:http://www.cnblogs.com/Misaki-Mei/p/7401533.html

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