Cod sursa(job #3151819)

Utilizator Vladimir_AlbuVladimir Albu Vladimir_Albu Data 22 septembrie 2023 22:36:51
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin;
ofstream fout;

int N;
vector<int> arr(1e5+5, 0);
vector<int> bit(1e5+5, 0);

void update(int i, int val) {
    while(i <= N) {
        bit[i] += val;
        i += (i & (-i));
    }
}

int prefixSum(int i) {
    int sum = 0;
    while(i > 0) {
        sum += bit[i];
        i -= (i & (-i));
    }
    return sum;
}

int rangeSum(int i, int j) {
    return prefixSum(j) - prefixSum(i - 1);
}

int main()
{
    int M;
    int command;
    int T, V, P, Q;
    fin.open("datorii.in");
    fin >> N >> M;
    for(int i = 1; i <= N; i++) {
        fin >> arr[i];
        update(i, arr[i]);
    }
    fout.open("datorii.out");
    for(int i = 0; i < M; i++) {
        fin >> command;
        if(command == 0) {
            // A
            fin >> T >> V;
            update(T, -V);
        } else {
            fin >> P >> Q;
            fout << rangeSum(P, Q) << endl;
        }
    }
    fin.close();
    fout.close();
    return 0;
}