Cod sursa(job #2211223)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 9 iunie 2018 16:42:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <bits/stdc++.h>

using namespace std;

inline int ub(int x) { return x & (-x); }

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

int N, M, x, cer, arg1, arg2, aib[15003];

void add(int pos, int val);
int query(int pos);

int main() {
    f >> N >> M;
    for(int i = 1; i <= N; i++) {
        f >> x;
        add(i, x);
    }
    for(int i = 1; i <= M; i++) {
        f >> cer >> arg1 >> arg2;
        if(cer == 0) {
            add(arg1, -arg2);
        }
        else {
            g << query(arg2) - query(arg1 - 1) << "\n";
        }
    }
    return 0;
}

void add(int pos, int val) {
    for(int i = pos; i <= N; i += ub(i))
        aib[i] += val;
}

int query(int pos) {
    int sum = 0;
    for(int i = pos; i >= 1; i -= ub(i))
        sum += aib[i];
    return sum;
}