Cod sursa(job #1448421)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 7 iunie 2015 01:09:32
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
//0007
#include <cstdio>

int bit[15005], n, m;

void update(int poz, int val) {
    while (poz <= n) {
        bit[poz] += val;
        poz += poz & (-poz);
    }
}

int getSum(int poz) {
    int ans = 0;
    while (poz > 0) {
        ans += bit[poz];
        poz -= poz & (-poz);
    }
    return ans;
}

int main() {
    FILE* fi = fopen("datorii.in", "rt");
    FILE* fo = fopen("datorii.out", "wt");

    fscanf(fi, "%d%d", &n, &m);
    for (int i = 1; i <= n; i++) {
        int aux;
        fscanf(fi, "%d", &aux);
        update(i, aux);
    }

    for (int i = 1; i <= m; i++) {
        int a, b, c;
        fscanf(fi, "%d%d%d", &a, &b, &c);
        if (a == 1) {
            fprintf(fo, "%d\n", getSum(c) - getSum(b - 1));
        } else {
            update(b, -c);
        }
    }

    return 0;
}