Cod sursa(job #1320441)

Utilizator tudoras8tudoras8 tudoras8 Data 17 ianuarie 2015 23:21:35
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

#define MAXN 15001

using namespace std;

int N, M, A[MAXN];
int AIB[MAXN];

void init(int idx, int val) {
    while (idx < MAXN) {
        AIB[idx] += val;
        idx += (idx & -idx);
    }
}

void update(int idx, int val) {
    while (idx < MAXN) {
        AIB[idx] -= val;
        idx += (idx & -idx);
    }
}

int query(int idx) {
    int sum = 0;
    while (idx >= 1) {
        sum += AIB[idx];
        idx -= (idx & -idx);
    }
    return sum;
}

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

    scanf("%d %d", &N, &M);
    for (int i = 1; i <= N; i++) {
        scanf("%d", &A[i]);
        init(i, A[i]);
    }

    int op, T, V, P, Q;
    while (M--) {
        scanf("%d", &op);
        if (op == 0) { // operatie de tip A (achitare)
            scanf("%d %d", &T, &V);
            update(T, V);
        } else if (op == 1) { // operatie de tip B (interogare)
            scanf("%d %d", &P, &Q);
            printf("%d\n", query(Q) - query(P - 1));
        }
    }
    return 0;
}