Cod sursa(job #2753160)

Utilizator lucamLuca Mazilescu lucam Data 21 mai 2021 12:00:51
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>

std::ifstream in("datorii.in");
std::ofstream out("datorii.out");

const int N = 15e3 + 1;

struct Aib {
    int n;
    int v[N];
    void update(int, int);
    int query(int);
} aib;

void Aib::update(int idx, int val) {
    while (idx <= n) {
        v[idx] += val;
        idx += idx & (-idx);
    }
}

int Aib::query(int idx) {
    int ret = 0;
    while (idx) {
        ret += v[idx];
        idx -= idx & (-idx);
    }
    return ret;
}

int main() {
    int m;
    in >> aib.n >> m;

    for (int i = 1; i <= aib.n; ++i) {
        int x;
        in >> x;
        aib.update(i, x);
    }

    for (int i = 0; i < m; ++i) {
        int op, p1, p2;
        in >> op >> p1 >> p2;

        if (!op) {
            aib.update(p1, -p2);
        }
        else {
            out << aib.query(p2) - aib.query(p1 - 1) << '\n';
        }
    }
}