Cod sursa(job #2497687)

Utilizator MarianConstantinMarian Constantin MarianConstantin Data 23 noiembrie 2019 10:10:46
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>

using namespace std;

const int MAXN = 100010;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int bit[MAXN], n, t;

int zeros(int x) {
    return ((x ^ (x - 1)) & x);
}

void sub(int pos, int value) {
    for (int i = pos; i <= n; i += zeros(i))
        bit[i] -= value;
}

void add(int pos, int value) {
    for (int i = pos; i <= n; i += zeros(i))
        bit[i] += value;
}

int getSum(int pos) {
    int sum = 0;
    for (int i = pos; i; i -= zeros(i))
        sum += bit[i];
    return sum;
}

int main() {
    fin >> n >> t;
    for (int i = 1; i <= n; ++i) {
        int x;
        fin >> x;
        add(i, x);
    }
    for (int i = 0; i < t; ++i) {
        int type, x, y;
        fin >> type >> x >> y;
        if (type == 0)
            sub(x, y);
        else {
            int sum1, sum2;
            sum1 = getSum(x - 1);
            sum2 = getSum(y);
            fout << sum2 - sum1 << '\n';
        }
    }
    return 0;
}