Cod sursa(job #180941)

Utilizator vlad_popaVlad Popa vlad_popa Data 17 aprilie 2008 17:56:51
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>

#define LSB(x) (x & ~(x-1))

int C[1<<14];
int N, M, val;

void update (int i){
    for (int x = i; x <= N; x += LSB(x)) 
        C[x] += val;
}

int query (int i){
    int sol = 0;
    for (int x = i; x; x -= LSB(x))
        sol += C[x];
    return sol;
}

int main (){
    freopen ("datorii.in", "rt", stdin);
    freopen ("datorii.out", "wt", stdout);
    
    scanf ("%d %d", &N, &M);
    for (int i = 1; i <= N; ++ i) 
        scanf ("%d ", &val), update(i);
    
    int t, a, b;
    for (; M; -- M){
        scanf ("%d %d %d", &t, &a, &b); val = -b;
        if (!t) update(a);
        else printf ("%d\n", query(b) - query(a - 1));
    }
    
    return 0;
}