Cod sursa(job #1499162)

Utilizator alexandru.ghergutAlexandru-Gabriel Ghergut alexandru.ghergut Data 10 octombrie 2015 12:05:55
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
// sursa imprumutata si modificata de la mereu alexandra
#include <fstream>
#include <cmath>
using namespace std;

const int maxN = 1 << ((int)log2(10000) + 2);

int A[maxN];

void update(int l, int r, int i, int p, int v){
    if (l == r && p == l){
        A[i] += v;
    }
    else if (p >= l && p <= r)
    {
        update(l, (l + r) / 2, i * 2, p, v);
        update((l + r) / 2 + 1, r, i * 2 + 1, p, v);

        A[i] += v;
    }
}

int vezi(int l, int r, int a, int b, int i){
    if (l >= a && r <= b)
        return A[i];

    if (r < a || l > b)
        return 0;

    return vezi(l, (l + r) / 2, a, b, i * 2) + vezi((l + r) / 2 + 1, r, a, b, i * 2 + 1);
}

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

    int n, m, x, y, z, i;

    f >> n >> m;
    for (i = 1; i <= n; ++i){
        f >> x;
        update(1, n, 1, i, x);
    }

    for (i = 0; i < m; ++i){
        f >> x >> y >> z;
        if (x == 0) {
            update(1, n, 1, y, -z);
        }
        else
            g << vezi(1, n, y, z, 1) << "\n";
    }

    f.close();
    g.close();

    return 0;
}