Cod sursa(job #2903640)

Utilizator biancar28Radulescu Alexia-Bianca biancar28 Data 17 mai 2022 19:11:06
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int V[15001],A[45004];

void build(int nod, int st, int dr){
    if(st==dr)
    {
        A[nod]=V[dr];
        return;
    }
    build(nod*2, st, (st+dr)/2);
    build(nod*2+1, (st+dr)/2+1, dr);

    A[nod]= A[2*nod]+A[2*nod+1];
}

void pay(int nod,int st, int dr, int t, int v){

    if(st==dr){
        A[nod] -= v;
        return;
    }
    pay(nod*2, st, (st+dr)/2, t, v);
    pay(nod*2+1, (st+dr)/2+1, dr, t, v);

    A[nod]= A[2*nod]+A[2*nod+1];

}

int sumt(int nod,int st, int dr, int p, int q)
{
    if(st>q || dr<p){
        return 0;
    }
    if(p<=st && dr<=q){
        return A[nod];
    }
    return sumt(nod*2, st, (st+dr)/2, p, q) + sumt(nod*2+1, (st+dr)/2+1, dr, p, q);

}


int main(){

    int b,i,t,v,n,m;
    f>>n>>m;
    for(i=1;i<=n;i++){
        f>>V[i];
    }
    build(1,1,n);

    for(i=1; i<=m;i++)
    {
        f>>b>>t>>v;
        if(b==0){
            pay(1,1,n,t,v);
        }
        else{
            g<<sumt(1,1,n,t,v)<<"\n";
        }
    }



    return 0;
}