Cod sursa(job #972198)

Utilizator costin7856Antonesi Florean Costin costin7856 Data 11 iulie 2013 11:23:04
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#define dim 150009
using namespace std;
int n,m,i,j,a[dim],x,A,B,tip;
void schimba(int nod,int st,int dr,int poz,int val)
{
    int mij;
    if(st==dr)
    a[nod]+=val;
    else
    {
        mij=(st+dr)/2;
        if(poz<=mij)
        schimba(2*nod,st,mij,poz,val);
        else
        schimba(2*nod+1,mij+1,dr,poz,val);
        a[nod]=a[2*nod]+a[2*nod+1];
    }
}
void detsum(int nod,int st,int dr,int A,int B)
{
    int mij;
    if(A<=st&&dr<=B)
    {
        x+=a[nod];
        return;
    }
    if(st<dr)
    {
        mij=(st+dr)/2;
        if(A<=mij)
        detsum(2*nod,st,mij,A,B);
        if(B>mij)
        detsum(2*nod+1,mij+1,dr,A,B);
    }
}
int main()
{
    ifstream f("datorii.in");
    ofstream g("datorii.out");
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        f>>x;
        schimba(1,1,n,i,x);
    }
    for(int i=1;i<=m;++i)
    {
        f>>tip>>A>>B;
        if(tip==0)
        schimba(1,1,n,A,-B);
        else
        {
            x=0;
            detsum(1,1,n,A,B);
            g<<x<<"\n";
        }
    }
}