Cod sursa(job #2757465)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 5 iunie 2021 12:17:32
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>

using namespace std;

const int P2MAX = (1 << 15);

int aint[P2MAX], val, poz, a, b;

void update(int p, int st, int dr) {
    if (st == dr) {
        aint[p] -= val;
        return;
    }
    int m = (st + dr) / 2;
    if (poz <= m)
        update(2 * p, st, m);
    else
        update(2 * p + 1, m + 1, dr);
    aint[p] = aint[2 * p] + aint[2 * p + 1];
}

int query(int p, int st, int dr) {
    if (st >= a && dr <= b)
        return aint[p];
    int m = (st + dr) / 2, s = 0;
    if (a <= m)
        s += query(2 * p, st, m);
    if (b > m)
        s += query(2 * p + 1, m + 1, dr);
    return s;
}

int main() {
    ifstream in("datorii.in");
    ofstream out("datorii.out");
    int n, m;
    in >> n >> m;
    for (poz = 1; poz <= n; ++poz) {
        in >> val;
        val = -val;
        update(1, 1, n);
    }
    while (m--) {
        bool tip;
        in >> tip;
        if (!tip) {
            in >> poz >> val;
            update(1, 1, n);
        }
        else {
            in >> a >> b;
            out << query(1, 1, n) << '\n';
        }
    }
    in.close();
    out.close();
    return 0;
}