Cod sursa(job #2603250)

Utilizator matthriscuMatt . matthriscu Data 18 aprilie 2020 20:59:41
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
#define zeros(x) ((x ^ (x-1)) & x)

int n, m, v[15005], AIB[15005], i, x, y, c;

void add(int x, int quantity) {
    for(int i = x; i <= n; i += zeros(i))
        AIB[i] += quantity;
}

int compute(int x) {
    int rez = 0;
    for(int i = x; i > 0; i -= zeros(i))
        rez += AIB[i];
    return rez;
}

int main() {
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; ++i) {
        scanf("%d", &x);
        add(i, x);
    }
    for(i = 1; i <= m; ++i) {
        scanf("%d%d%d", &c, &x, &y);
        if(c == 0)
            add(x, -y);
        else
            printf("%d\n", compute(y) - compute(x-1));
    }
}