Cod sursa(job #1956326)

Utilizator GeorgianBaditaBadita Marin-Georgian GeorgianBadita Data 6 aprilie 2017 17:43:12
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#define NMAX 15001
#define max(a, b) a >= b ? a : b
using namespace std;
int T[4 * NMAX + 66];
int N, M, poz, val, a, b, sum;

FILE *f = freopen("datorii.in", "r", stdin);
FILE *g = freopen("datorii.out", "w", stdout);

void update(int nod, int st, int dr) {
    int m = (st + dr) / 2;
    T[nod] += val;
    if(st == dr) return;
    if(poz <= m) update(2 * nod, st, m);
    else update(2 * nod + 1, m + 1, dr);
}

void query(int nod, int st, int dr) {
    int m = (st + dr) / 2;
    if(st >= a && dr <= b) {
        sum += T[nod];
        return;
    }
    if(a <= m) query(2 * nod, st, m);
    if(b > m) query(2 * nod + 1, m + 1, dr);
}
int main() {
    scanf("%d%d", &N, &M);
    for(int i = 1; i<=N; i++) {
        int x;
        scanf("%d", &x);
        poz = i; val = x;
        update(1, 1, N);
    }
    for(int i =1 ; i<=M; i++ )  {
        int type;
        scanf("%d", &type);
        if(type == 0) {
            scanf("%d%d", &poz, &val);
            val = -val;
            update(1, 1, N);
        }
        else {
            scanf("%d%d", &a, &b);
            sum = 0;
            query(1, 1, N);
            printf("%d\n", sum);
        }
    }
    return 0;
}