Cod sursa(job #2907722)

Utilizator mihnea.tTudor Mihnea mihnea.t Data 31 mai 2022 13:51:52
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

#define NMAX ((int)15e3)
#define COMM_UPDATE 0
#define COMM_SUM_QUERY 1

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int tree[NMAX + 1];
int v[NMAX + 1];

void update(int index, const int new_val, const int n_max) {
    while (index <= n_max) {
        tree[index] += new_val;
        index += (index & -index);
    }
}

int get_val(int index) {
    int val = 0;
    while (index > 0) {
        val += tree[index];
        index -= (index & -index);
    }

    return val;
}

int main(void) {
    int n, m;
    fin >> n >> m;

    for (int i = 1; i <= n; ++i) {
        fin >> v[i];
        update(i, v[i], n);
    }

    for (int i = 0; i < m; ++i) {
        int type;
        fin >> type;

        switch (type) {
            case COMM_UPDATE:
                int pos, val;
                fin >> pos >> val;

                v[pos] -= val;
                update(pos, -val, n);

                break;
            
            case COMM_SUM_QUERY:
                int left, right;
                fin >> left >> right;

                fout << get_val(right) - get_val(left - 1) << "\n";
        }
    }

    return 0;
}