Cod sursa(job #1247725)

Utilizator Sanduleac_VladSanduleac Vllad Alexandru Sanduleac_Vlad Data 23 octombrie 2014 15:14:06
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
using namespace std;

long n, m;
long v[15001];
long aib[15001];

void update(long x, long val) {
    while(x <= n) {
        aib[x] += val;
        x += (x & (-x));
    }
}

void createAIB() {
    long i;
    for(i = 1; i <= n; i++)
        update(i, v[i]);
}

long basicQuery(long x) {
    long rez = 0;
    while(x) {
        rez += aib[x];
        x -= (x & (-x));
    }
    return rez;
}

long query(long x, long y) {
    return basicQuery(y) - basicQuery(x - 1);
}

long c, a, b;

int main() {
    long i, j;
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%ld %ld", &n, &m);
    for(i = 1; i <= n; i++) {
        scanf("%ld", &v[i]);
    }
    createAIB();
    for(i = 1; i <= m; i++) {
        scanf("%ld %ld %ld", &c, &a, &b);
        if(c)
            printf("%ld\n", query(a, b));
        else update(a, -b);
    }
    return 0;
}