Cod sursa(job #1493205)

Utilizator andreea_zahariaAndreea Zaharia andreea_zaharia Data 28 septembrie 2015 20:52:21
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>

#define NMAX 15010

int N, M;
int aib[NMAX];

void update (int poz, int val) {
    for (int i = poz; i <= N; i += (i&(-i))) {
        aib[i] += val;
    }
}

int query (int poz) {
    int ans = 0;
    for (int i = poz; i > 0; i -= (i&(-i))) {
        ans += aib[i];
    }
    return ans;
}

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

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

    while (M--) {
        int tip, X, Y;
        scanf ("%d%d%d", &tip, &X, &Y);

        if (tip == 0) {
            update (X, -Y);
        }
        else {
            printf ("%d\n", query (Y) - query (X - 1));
        }
    }

    return 0;
}