Cod sursa(job #2924202)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 26 septembrie 2022 23:06:55
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#include <fstream>

using namespace::std;

int N, M;
vector<int> A, st;

int update(int pos, int val, int l, int r, int x) {
    if (pos < l || pos > r) return st[x];
    if (l == r) {
        st[x] -= val;
        return st[x];
    }
    

    int mij = (l+r)/2;
    st[x] = update(pos, val, l, mij, x*2) + update(pos, val, mij+1, r, x*2+1);

    return st[x];
}

int query(int a, int b, int l, int r, int x) {
    if (b < l || r < a) return 0;
    if (a <= l && r <= b) return st[x];

    int mij = (l+r)/2;
    return query(a, b, l, mij, x*2) + query(a, b, mij+1, r, x*2+1);
}

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

    fin >> N >> M;
    st.resize(N << 2, 0);

    for (int i = 1; i < N+1; i++) {
        int val;
        fin >> val;
        update(i, -val, 1, N, 1);
    }

    while (M--) {
        int cod;
        fin >> cod;

        if (cod == 0) {
            int T, V;
            fin >> T >> V;
            update(T, V, 1, N, 1);
        }
        else {
            int P, Q;
            fin >> P >> Q;
            fout << query(P, Q, 1, N, 1) << '\n';
        }
    }
}