Cod sursa(job #3323076)

Utilizator Alexandru_HlusovAlexandru Hlusov Alexandru_Hlusov Data 16 noiembrie 2025 21:52:17
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream input("datorii.in");
ofstream output("datorii.out");

vector<int> sums;

int lsb(int n){
    return ((n ^ (n - 1)) & n);
}

void add(int index, int amount){
    for(int i = index; i < sums.size(); i += lsb(i)){
        sums[i] += amount;
    }
}

int getSum(int index){
    int sum = 0;

    for(int i = index; i > 0; i -= lsb(i)){
        sum += sums[i];
    }
    return sum;
}

int main(){
    int N, M;
    input >> N >> M;

    sums.resize(N + 1);

    for(int i = 1; i <= N; ++ i){
        int x;
        input >> x;

        add(i, x);
    }

    while(M--){
        int code, a, b;
        input >> code >> a >> b;

        if(code == 0)
            add(a, -b);
        else
            output << getSum(b) - getSum(a - 1) << "\n";
    }
}