树状数组2模板 Luogu 3368

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

好吧,我看了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 }  

 

转载于:https://www.cnblogs.com/Misaki-Mei/p/7401533.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值