Cod sursa(job #2754916)

Utilizator bogdan2405Strat Bogdan-Valentin bogdan2405 Data 26 mai 2021 17:55:55
Problema Datorii Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include<bits/stdc++.h>

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

vector<int> arbint;
void arboreInterval(int nod, int stanga, int dreapta, int pozitie, int valoare){
    if(stanga==dreapta){
        arbint[nod]=valoare+arbint[nod];
        return;
    }
    else{
        int mijloc;
        mijloc=(stanga+dreapta)/2;
        if(pozitie<=mijloc){
            arboreInterval(nod*2,stanga,mijloc,pozitie,valoare);
        }
        else{
            arboreInterval(nod*2+1,mijloc+1,dreapta,pozitie,valoare);
        }
        arbint[nod]=arbint[nod*2]+arbint[nod*2+1];

    }

}

int query(int nod, int stanga, int dreapta, int queryStanga, int queryDreapta ){
    int sumaStanga=0,sumaDreapta=0;

    if(stanga>queryDreapta || dreapta<queryStanga){
        return 0;
    }
     if(stanga>=queryStanga && dreapta<=queryDreapta){
        return arbint[nod];
    }

    int mijloc;
    mijloc=(stanga+dreapta)/2;
    if(queryStanga<=mijloc){
        sumaStanga=query(nod*2,stanga,mijloc,queryStanga,queryDreapta);
    }
    if(mijloc<queryDreapta){
        sumaDreapta=query(nod*2+1,mijloc+1,dreapta,queryStanga,queryDreapta);
    }
    return sumaStanga+sumaDreapta;
}
int main(){
    arbint.assign(1000001,0);
    vector<int> v;
    int n,m,i,j,valoare,queryStanga,queryDreapta,ans,pozitie;
    bool tip;
    f>>n>>m;
    for(i=0;i<n;++i){
        f>>valoare;
        arboreInterval(1,1,n,i+1,valoare);
    }
    for(i=0;i<m;++i){
        f>>tip>>queryStanga>>queryDreapta;;
        if(tip==1){
            g<<query(1,1,n,queryStanga,queryDreapta)<<'\n';;
            
        }
        else{
            arboreInterval(1,1,n,queryStanga,-queryDreapta);
        }
    }
    return 0;
}