Cod sursa(job #2183393)

Utilizator andrei.gramescuAndrei Gramescu andrei.gramescu Data 23 martie 2018 09:36:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
using namespace std;
#define NMAX 15005

int n, m, aib[NMAX];

void update(int poz, int val) {
    for(; poz<=n; poz+=poz&-poz)
        aib[poz] += (-1) * val;
}

int querry(int poz) {
    int sum = 0;
    for(; poz>0; poz-=poz&-poz)
        sum += aib[poz];

    return sum;
}

int main() {

    int i, x, y, aux;
    FILE *fin, *fout;
    fin = fopen("datorii.in", "r");
    fout = fopen("datorii.out", "w");

    fscanf(fin, "%d %d", &n, &m);
    for(i=1; i<=n; i++) {
        fscanf(fin, "%d ", &aux);
        update(i, (-1) * aux);
    }

    for(i=1; i<=m; i++) {
        fscanf(fin, "%d ", &aux);
        if(aux == 0) {
            fscanf(fin, "%d %d", &x, &y);
            update(x, y);
        }
        else {
            fscanf(fin, "%d %d", &x, &y);
            fprintf(fout, "%d\n", querry(y) - querry(x-1));
        }
    }
    return 0;
}