Cod sursa(job #2228005)

Utilizator BaldurCronos Baldur Data 2 august 2018 14:24:01
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>
#define N 15005
#define DEBUG() cout << "KEK!\n"
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");

int next(int index) {
        return index + (index & -index);
}

int parent(int index) {
        return index - (index & -index);
}

void update_BIT(int BIT[], int x, int index, int sz) {
        while (index <= sz) {
                BIT[index] += x;
                index = next(index);
        }
}

int get_interval(int BIT[], int index) {
        int sum = 0;

        while (index > 0) {
                sum += BIT[index];
                index = parent(index);
        }

        return sum;
}

void build_BIT(int v[], int BIT[], int sz) {
        for (int i = 1; i <= sz; i++)
                update_BIT(BIT, v[i], i, sz);
}

int main() {
        int n, m, x, y, z, a[N], t[N];
        in >> n >> m;

        for (int i = 1; i <= n; i++)
                in >> a[i];

        build_BIT(a, t, n);

        for (int i = 1; i <= m; i++) {
                in >> x >> y >> z;
                if (!x) {
                        update_BIT(t, -z, y, n);
                } else {
                        out << get_interval(t, z) - get_interval(t, y - 1) << "\n";
                }
        }

        return 0;
}