Cod sursa(job #1201386)

Utilizator timicsIoana Tamas timics Data 25 iunie 2014 00:58:01
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>
int a[15100],t[15100],op,x,y,M,N;

int right(int x) {
    return ((x^(x-1))&x);
}

void add(int x, int y) {
    int curr=x;
    while(curr<=N) {
        t[curr]+=y;
        curr+=right(curr);
    }
}

int sum(int x) {
    int curr=x, ret=0;
    while(curr) {
        ret+=t[curr];
        curr-=right(curr);
    }
    return ret;
}

int main() {
    //freopen("input.txt","r",stdin);
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&N,&M);
    for(int i=1;i<=N;++i) {
        scanf("%d",&x);
        add(i,x);
    }
    for(int i=1;i<=M;++i) {
        scanf("%d%d%d",&op,&x,&y);
        if(op==0) {
            add(x,-y);
        } else {
            printf("%d\n",sum(y)-sum(x-1));
        }
    }
    return 0;
}