Cod sursa(job #2107890)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 17 ianuarie 2018 19:34:10
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;

const int dim = 100005;
int bit[dim], N;

int lsb(int x) {
    return x&-x;
}

void update(int pos, int val) {
    for(; pos <= N; pos += lsb(pos))
        bit[pos]+=val;
}
long long query(int pos) {
    long long res = 0;
    for(; pos; pos -= lsb(pos))
        res += bit[pos];
    return res;
}

void solve() {
    int M;
    cin >> N >> M;

    for (int i = 1; i <= N; ++i) {
        int x;
        cin >> x;
        update(i, x);
    }

    for (; M; --M) {
        int op;
        cin >> op;

        if (op == 0) {
            int pos, val;
            cin >> pos >> val;
            update(pos, -val);
        }
        else {
            int left, right;
            cin >> left >> right;
            cout << query(right) - query(left - 1) << '\n';
        }
    }
}

int main() {
    assert(freopen("datorii.in", "r", stdin));
    assert(freopen("datorii.out", "w", stdout));

    solve();

    return 0;
}