Cod sursa(job #1448568)

Utilizator enedumitruene dumitru enedumitru Data 7 iunie 2015 14:55:25
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
using namespace std;
ifstream f("datorii.in"); ofstream g("datorii.out");
int arb[45000];
void update(int nod, int st, int dr, int poz, int val)
{   if(st==dr) arb[nod]+=val;
    else
    {   int m=(st+dr)/2;
        if(poz<=m) update(nod*2,st,m,poz,val); else update(nod*2+1,m+1,dr,poz,val);
        arb[nod]=arb[nod*2]+arb[nod*2+1];
    }
}
void querry(int nod, int st, int dr, int a, int b, int &sol)
{   if(a<=st && dr<=b) sol+=arb[nod];
    else
    {   int m=(st+dr)/2;
        if(a<=m) querry(nod*2,st,m,a,b,sol);
        if(m<b)  querry(nod*2+1,m+1,dr,a,b,sol);
    }
}
int main()
{   int n,nr;
    f>>n>>nr;
    for(int x,i=1;i<=n;++i){f>>x; update(1,1,n,i,x);}
    for(int t,poz,val,a,b,sol,i=1;i<=nr;++i)
    {   f>>t;
        if(t) {f>>a>>b; sol=0; querry(1,1,n,a,b,sol); g<<sol<<'\n';}
         else {f>>poz>>val; update(1,1,n,poz,-val);}
    }
    g.close(); return 0;
}