Cod sursa(job #2818547)

Utilizator VladTZYVlad Tiganila VladTZY Data 16 decembrie 2021 13:56:43
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>

#define NMAX 15005

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int n, x, questions, type, a, b, answer;
int arbore[NMAX * 5];

void update(int node, int st, int dr, int poz, int val, int sign) {

    if (st == dr) {

        arbore[node] = arbore[node] + sign * val;

        return;
    }

    int mid = (st + dr) / 2;

    if (poz <= mid)
        update(node * 2, st, mid, poz, val, sign);
    else
        update(node * 2 + 1, mid + 1, dr, poz, val, sign);

    arbore[node] = arbore[node * 2] + arbore[node * 2 + 1];
}

void query(int node, int st, int dr, int start, int finish) {

    if (start <= st && dr <= finish) {

        answer = answer + arbore[node];

        return ;
    }

    int mid = (st + dr) / 2;

    if (start <= mid)
        query(node * 2, st, mid, start, finish);
    if (mid < finish)
        query(node * 2 + 1, mid + 1, dr, start, finish);
}

int main()
{
    f >> n >> questions;
    for (int i = 1; i <= n; i++) {
        f >> x;

        update(1, 1, n, i, x, 1);
    }

    while (questions--) {
        f >> type >> a >> b;

        if (type == 0) {

            update(1, 1, n, a, b, -1);
        } else {

            answer = 0;
            query(1, 1, n, a, b);
            g << answer << "\n";
        }
    }

    return 0;
}