Cod sursa(job #2201088)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 3 mai 2018 15:52:56
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;

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

int N, K, x, cer, p1, p2, arbore[4 * 15003];
void add(int poz, int val, int nod, int a, int b) {
    if(a == b) arbore[nod] += val;
    else {
        int mij = (a + b) / 2;
        if(poz <= mij) add(poz, val, nod * 2, a, mij);
        else           add(poz, val, nod * 2 + 1, mij + 1, b);
        arbore[nod] += val;
    }
}
int query(int st, int dr, int nod, int a, int b) {
    if(st <= a && dr >= b) return arbore[nod];
    else {
        int mij = (a + b) / 2, partea_stanga = 0, partea_dreapta = 0;
        if(st <= mij) partea_stanga = query(st, dr, nod * 2, a, mij);
        if(dr > mij) partea_dreapta = query(st, dr, nod * 2 + 1, mij + 1, b);
        return partea_stanga + partea_dreapta;
    }
}
int main()
{
    f >> N >> K;
    for(int i = 1; i <= N; i++)
        f >> x, add(i, x, 1, 1, N);
    for(int i = 1; i <= K; i++) {
        f >> cer >> p1 >> p2;
        if(cer == 0) add(p1, -p2, 1, 1, N);
        else         g << query(p1, p2, 1, 1, N) << "\n";
    }
    return 0;
}