Cod sursa(job #2108440)

Utilizator VoineaAndreiVoinea Ioan-Andrei VoineaAndrei Data 18 ianuarie 2018 12:39:26
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;

#define n_Max 15000

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

int arb[n_Max*4+3];
int a1[n_Max];

void update (int nod,int a,int b,int poz,int val){

    int mij;

    if(a==b) arb[nod]=val;
    else {
        mij=(a+b)/2;

        if(poz<=mij) update(2*nod,a,mij,poz,val);
        else update(2*nod+1,mij+1,b,poz,val);

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

int querry (int nod,int a,int b,int qa,int qb){

    int mij,rez1=0,rez2=0;

    if(qa<=a && b<=qb) return arb[nod];

    mij=(a+b)/2;
    if(qa<=mij) rez1+=querry(2*nod,a,mij,qa,qb);
    if(mij<qb) rez2+=querry(2*nod+1,mij+1,b,qa,qb);

    return rez1+rez2;
}

int main(){

    int n,m;
    f>>n>>m;

    for(int i=1;i<=n;++i){
        f>>a1[i];
        update(1,1,n,i,a1[i]);
    }

    int a,b,c;
    for(int i=1;i<=m;++i){
        f>>c>>a>>b;
        if(c==0){
            a1[a]-=b;
            update(1,1,n,a,a1[a]);
        }
        else
            g<<querry(1,1,n,a,b)<<'\n';
    }

}