Cod sursa(job #1454315)

Utilizator piroComisia piro Data 26 iunie 2015 01:25:17
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <bits/stdc++.h>

int A[15001];

inline int lsb(int val) {
    return val & -val;
}

void update(int pos, int am, int n) {
    while (pos <= n) {
        A[pos] += am;
        pos += lsb(pos);
    }
}

int query(int pos) {
    int sum = 0;
    for (; pos > 0; pos -= lsb(pos))
        sum += A[pos];
    return sum;
}

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

    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; ++i) {
        int x;
        scanf("%d", &x);
        update(i, x, n);
    }
    for (int q = 1; q <= m; ++q) {
        int type, a, b;
        scanf("%d%d%d", &type, &a, &b);
        if (type == 0)
            update(a, -b, n);
        else
            printf("%d\n", query(b) - query(a - 1));
    }

    return 0;
}