阅读背景:

树状数组区间更新

来源:互联网 
#include<stdio.h>
#include<iostream>
#include<string.h>
#define maxn 101000
#define mem(a,b) memset(a,b,sizeof(a))
#define lowbit(x) x&(-x)
#define sf scanf
#define pf printf
using namespace std;

int n,q,num;
int c[maxn];

void update(int i,int x){
    for(;i<=n;i+=lowbit(i)) c[i]+=x;
}

int sum(int a){
    int s=0;
    for(int i=a;i>0;i-=lowbit(i)) s+=c[i];
    return s;
}

int main(){
    freopen("a.txt","r",stdin);
    sf("%d",&n);
    for(int i=1;i<=n;i++){
        int x;
        scanf("%d",&x);
        update(i,x);
    }
    scanf("%d",&q);
    while(q--){
        scanf("%d",&num);
        if(num==1){
            int a,b,c;
            sf("%d%d%d",&a,&b,&c);
            for(int i=a;i<=b;i++) update(i,c);//区间更新
        }
        else{
            int a;
            sf("%d",&a);
            pf("%d\n",sum(a)-sum(a-1));
        }
    }
    return 0;
}
#include<stdio.h>
#include<iostream>
#include<s



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: