Cod sursa(job #2904364)

Utilizator AntoniaPopoviciAntonia-Adelina Popovici AntoniaPopovici Data 17 mai 2022 23:23:50
Problema Datorii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <iostream>
#define MAX 100005

using namespace std;

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

int n, m, v[10 * MAX];
int x, y, z, q, sum_rest;
bool opt;

void update(int nod, int st, int dr) {
    if (st == dr)
        v[nod] += y;
    else {
        int mij = (st + dr) / 2;
        if (x <= mij)
            update(2 * nod, st, mij);
        else
            update(2 * nod + 1, mij + 1, dr);
        v[nod] = v[2 * nod] + v[2 * nod + 1];
    }
}

void query(int nod, int st, int dr) {
    if (z <= st && dr <= q)
        sum_rest += v[nod];
    else {
        int mij = (st + dr) / 2;
        if (z <= mij)
            query(2 * nod, st, mij);
        if (q > mij)
            query(2 * nod + 1, mij + 1, dr);
    }
}

int main() {
    fin >> n >> m;
    for (int i = 1; i <= n; i++) {
        x = i;
        fin >> y;
        update(1, 1, n);
    }
    for (int i = 1; i <= m; i++) {
        fin >> opt;
        if (opt == 0) {
            fin >> x >> y;
            y *= (-1);
            update(1, 1, n);
        }
        else {
            sum_rest = 0;
            fin >> z >> q;
            query(1, 1, n);
            fout << sum_rest << "\n";
        }
    }
}