Cod sursa(job #2663065)

Utilizator razvan242Zoltan Razvan-Daniel razvan242 Data 25 octombrie 2020 11:33:50
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

string name = "datorii";
ifstream fin(name + ".in");
ofstream fout(name + ".out");

int n, m;
vector<int> v;
vector<int> aib;

void init() {
    v = vector<int>(n + 1);
    aib = vector<int>(n + 1);
}

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

void update(int pos, int val) {
    for (int idx = pos; idx <= n; idx += lsb(idx)) {
        aib[idx] += val;
    }
}

int query(int pos) {
    /// suma de la 1 la pos
    int sum = 0;
    for (int idx = pos; idx > 0; idx -= lsb(idx)) {
        sum += aib[idx];
    }
    return sum;
}

void read() {
    fin >> n >> m;
    init();

    for (int i = 1; i <= n; ++i) {
        fin >> v[i];
    }

    for (int i = 1; i <= n; ++i) {
        update(i, v[i]);
    }
}

void solveQueries() {
    int op, x, y;
    while (m--) {
        fin >> op;
        if (op == 0) {
            fin >> x >> y;
            update(x, -y);
        }
        else if (op == 1) {
            fin >> x >> y;
            fout << query(y) - query(x - 1) << '\n';
        }
    }
}

int main()
{
    read();
    solveQueries();
    return 0;
}