Cod sursa(job #2559211)

Utilizator CandyBucherGaube Robert Gabriel CandyBucher Data 27 februarie 2020 09:39:42
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<iostream>
#include<fstream>
#define dim 15010
using namespace std;

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

int arb[4*dim+66],n,m,val,pos,a,b,si;

void update(int nod,int st,int dr);
void interogare(int nod,int st,int dr);

void citire()
{
    int i; f>>n>>m;
    for(i=1;i<=n;i++){
        pos=i; f>>val;
        update(1,1,n);
    }
}

void solve()
{
    int i,x;
    for(i=1;i<=m;i++){
        f>>x>>a>>b;
        if(x==0){
            val=-b; pos=a;
            update(1,1,n);
        }
        else{
            si=0;
            interogare(1,1,n);
            o<<si<<'\n';
        }
    }
}

int main()
{
    citire();
    solve();
    o.close();
    f.close();
}

void update(int nod,int st,int dr)
{
    if(st==dr){
        arb[nod]+=val;
        return;
    }
    int mij=(st+dr)/2;
    if(pos<=mij) update(nod*2,st,mij);
    else update(nod*2+1,mij+1,dr);

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

void interogare(int nod,int st,int dr)
{
    if(a<=st&&dr<=b){
        si+=arb[nod];
        return;
    }
    int mij=(st+dr)/2;
    if(a<=mij) interogare(nod*2,st,mij);
    if(mij<b) interogare(nod*2+1,mij+1,dr);
}