Cod sursa(job #1793652)

Utilizator penetavyPene Cosmin-Octavian penetavy Data 31 octombrie 2016 12:19:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>

using namespace std;

#define N_MAX 15000
#define M_MAX 100000

FILE *fin = fopen("datorii.in", "r");
FILE *fout = fopen("datorii.out", "w");

int N, M;
int A[M_MAX + 1];
int aib[N_MAX + 1];
int aib_size = N_MAX;

void add(int pos, int val) {
    do{
        aib[pos] += val;
        pos += pos & (-pos);
    } while(pos <= aib_size);
}

int sum(int x) {
    int S = 0;
    while(x != 0){
        S += aib[x];
        x &= (x - 1);
    }
    return S;
}

int sum_interval(int st, int dr){
    return sum(dr) - sum(st - 1);
}

int main() {
    int i, j, val;
    int opr, x, y;

    fscanf(fin, "%d %d", &N, &M);
    for (i = 1; i <= N; i++) {
        fscanf(fin, "%d", &val);
        add(i, val);
    }

    for (i = 1; i <= M; i++) {
        fscanf(fin, "%d %d %d", &opr, &x, &y);
        if (opr == 1) {
            fprintf(fout, "%d\n", sum_interval(x, y));
        }
        else {
            add(x, -y);
        }
    }


    fclose(fin);
    fclose(fout);
    return 0;
}