Cod sursa(job #3333021)

Utilizator AnSeDraAndrei Sebastian Dragulescu AnSeDra Data 10 ianuarie 2026 15:34:45
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>

using namespace std;

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

const int Nmax = 15005;

int n, q;
int aib[Nmax];

void actualiare_aib(int poz, int val){
    while(poz <= n){
        aib[poz] -= val;
        poz += poz & (-poz);
    }
}

int interogare_aib(int poz){
    int sol = 0;

    while(poz > 0){
        sol += aib[poz];
        poz -= poz & (-poz);
    }

    return sol;
}

int interogare(int x, int y){
    return interogare_aib(y) - interogare_aib(x - 1);
}

void citire_sir_initial(){
    int val;

    fin >> n >> q;
    for(int i = 1; i <= n; i++){
        fin >> val;
        actualiare_aib(i, -val);
    }
}

void citire_si_rezolvare_interogari(){
    int tip, poz, val, start, finish;

    for(int i = 1; i <= q; i++){
        fin >> tip;
        if(tip == 0){
            fin >> poz >> val;
            actualiare_aib(poz, val);
        }
        else{
            fin >> start >> finish;
            fout << interogare(start, finish) << '\n';
        }
    }
}

int main(){
    citire_sir_initial();
    citire_si_rezolvare_interogari();

    return 0;
}