Cod sursa(job #2427651)

Utilizator anamariatoaderAna Toader anamariatoader Data 1 iunie 2019 14:05:00
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int n,m,i,t,a,b,poz,val,q,ai[4*15000],v[15005],nr;

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

void query(int nod, int st, int dr){
    if(a<=st && dr<=b){
        nr+=ai[nod];
        return;
    }
    int mij=(st+dr)/2;
    if(a<=mij)
        query(2*nod,st,mij);
    if(b>mij)
        query(2*nod+1,mij+1,dr);
}

int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++){
        fin>>v[i];
        poz=i; val=-v[i];
        update(1,1,n);
    }
    for(q=1;q<=m;q++){
        fin>>t;
        if(!t){
           fin>>poz>>val;
           update(1,1,n);
        }
        else{
            fin>>a>>b;
            nr=0;
            query(1,1,n);
            fout<<nr<<'\n';
        }
    }
    return 0;
}