Cod sursa(job #2594349)

Utilizator GiosinioGeorge Giosan Giosinio Data 5 aprilie 2020 19:13:13
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
#define DIM 100005

using namespace std;

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

int N,M,pret[10*DIM];
int T,V,P,Q,sum_rest;
bool op;

void update(int nod, int st, int dr){
    if(st == dr)
        pret[nod] +=  V;
    else{
        int mij = (st+dr)/2;
        if(T<= mij)
            update(2*nod,st,mij);
        else
            update(2*nod+1,mij+1,dr);
        pret[nod] = pret[2*nod] + pret[2*nod+1];
    }
}

void query(int nod, int st, int dr){
    if(P<=st && dr<=Q)
        sum_rest += pret[nod];
    else{
        int mij = (st+dr)/2;
        if(P <= mij)
            query(2*nod,st,mij);
        if(Q > mij)
            query(2*nod+1,mij+1,dr);
    }
}

int main(){
    f>>N>>M;
    for(int i=1; i<=N; i++){
        T=i; f>>V;
        update(1,1,N);
    }
    for(int i=1; i<=M; i++){
        f>>op;
        if(op==0){
            f>>T>>V; V*=(-1);
            update(1,1,N);
        }
        else{
            sum_rest = 0;
            f>>P>>Q;
            query(1,1,N);
            g<<sum_rest<<"\n";
        }
    }
}