Cod sursa(job #2903809)

Utilizator biancar28Radulescu Alexia-Bianca biancar28 Data 17 mai 2022 20:37:03
Problema Datorii Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;

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

void pay(int nod,int st, int dr, int t, int v, int A[500005]){
    if(st>t || dr<t){
        return;
    }
    if(st==dr){
        A[nod] += v;
        return;
    }
    int mij=(st+dr)/2;
    if(t<=mij){
        pay(nod*2, st, mij, t, v, A);
    }
    else{
        pay(nod*2+1, mij+1, dr, t, v, A);
    }
    A[nod]= A[2*nod]+A[2*nod+1];
}

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

int main(){

    int A[500005],n,m,b,t,v,a;
    f>>n>>m;
    for(int i=1;i<=n;i++){
        f>>a;
        pay(1,1,n,i,a,A);
    }

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

}