Cod sursa(job #950386)

Utilizator dariusdariusMarian Darius dariusdarius Data 16 mai 2013 18:50:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int aint[100005];
int ans;
void update(int nod,int st,int dr,int p,int v)
{
    if(st==dr)
    {
        aint[nod]-=v;
        return;
    }
    int med=(st+dr)/2;
    if(p>med)
        update(2*nod+1,med+1,dr,p,v);
    else
        update(2*nod,st,med,p,v);
    aint[nod]=aint[2*nod]+aint[2*nod+1];
}
void query(int nod,int st,int dr,int x,int y)
{
    if(x<=st && dr<=y)
    {
        ans+=aint[nod];
        return;
    }
    int med=(st+dr)/2;
    if(x<=med)
        query(2*nod,st,med,x,y);
    if(y>med)
        query(2*nod+1,med+1,dr,x,y);
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int n,m,p,q,t;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&p);
        update(1,1,n,i,-p);
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&t,&p,&q);
        if(t==0)
            update(1,1,n,p,q);
        else
        {
            ans=0;
            query(1,1,n,p,q);
            printf("%d\n",ans);
        }
    }
    return 0;
}