Cod sursa(job #3244739)

Utilizator AnSeDraAndrei Sebastian Dragulescu AnSeDra Data 26 septembrie 2024 11:41:26
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 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 update_aib(int poz, int val){
    for(int i = poz; i <= n; i += (i & (-i))){
        aib[i] += val;
    }
}

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

    for(int i = poz; i >= 1; i -= (i & (-i))){
        sol += aib[i];
    }

    return sol;
}

int query_interval(int st, int dr){
    return query_aib(dr) - query_aib(st - 1);
}

void citire(){
    int val;

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

void query_0(){
    int poz, val;

    fin >> poz >> val;
    update_aib(poz, -val);
}

void query_1(){
    int start, finish;

    fin >> start >> finish;
    fout << query_interval(start, finish) << '\n';
}

void citire_si_rezolvare_querys(){
    bool type;

    for(int i = 1; i <= q; i++){
        fin >> type;

        if(type == 0){
            query_0();
        }
        else{
            query_1();
        }
    }
}

int main(){
    citire();
    citire_si_rezolvare_querys();

    return 0;
}