Cod sursa(job #1004172)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 2 octombrie 2013 11:09:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#define Nmax 15001

using namespace std;

int N, M, aib[Nmax];

void update(int idx, int val){

    while(idx <= N){
        aib[idx] += val;
        idx += (idx & -idx);
    }

}

int query(int idx){

    int sum = 0;

    while(idx > 0){
        sum += aib[idx];
        idx -= (idx & -idx);
    }

    return sum;
}


int main(){

    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);

    scanf("%d%d",&N,&M);

    for(int i = 1; i <= N; ++i){
        int x;
        scanf("%d", &x);
        update(i, x);
    }


    for(int i = 1; i <= M; ++i){

        int t, a, b;

        scanf("%d", &t);

        switch(t){

            case 0:
                scanf("%d%d", &a, &b);
                update(a, -b);
                break;

            case 1:{
                scanf("%d%d", &a, &b);
                int sA = query(a -1);
                int sB = query(b);
                printf("%d\n", sB - sA);
                break;
            }         
                
        }


    }


    return 0;
}