Cod sursa(job #972185)

Utilizator costin7856Antonesi Florean Costin costin7856 Data 11 iulie 2013 11:08:38
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<cstdio>
#define dim 150009
//using namespace std;
int tip,mij,x,n,m,a[dim],A,B;
void schimba(long nod,long st,long dr,long poz,long val)
{
    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 citire()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        schimba(1,1,n,i,x);
    }
}

void detsum(long nod,long st,long dr,long A,long B)
{
    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()
{
    citire();
    for(int i=1;i<=m;i++)
    {
        scanf("&d&d&d",&tip,&A,&B);
        if(!tip)
        schimba(1,1,n,A,-B);
    }
    for(int i=1;i<=m;++i)
    {
        scanf("%d%d%d",&tip,&A,&B);
        if(!tip)
        schimba(1,1,n,A,-B);
        else
        {
            x=0;
            detsum(1,1,n,A,B);
            printf("%d ",x);
        }
    }
}