Cod sursa(job #2814786)

Utilizator LuciBBadea Lucian LuciB Data 8 decembrie 2021 16:50:17
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
using namespace std;
const int NMAX = 15e5;
int aib[NMAX + 1], n;

int suma(int val) {
    int s = 0;
    while(val) {
        s += aib[val];
        val -= (val & (-val));
    }
    return s;
}

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

int main() {
    int m, i, op, a, b;
    FILE *fin, *fout;
    fin = fopen("datorii.in", "r");
    fout = fopen("datorii.out", "w");

    fscanf(fin, "%d%d", &n, &m);
    for(i = 0; i < n; i++) {
        int x;
        fscanf(fin, "%d", &x);
        update(i + 1, x);
    }
    for(i = 0; i < m; i++) {
        fscanf(fin, "%d%d%d", &op, &a, &b);
        if(op == 0)
            update(a, -b);
        else
            fprintf(fout, "%d\n", suma(b) - suma(a - 1));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}