Cod sursa(job #1034171)

Utilizator tudgal1001Profir Tudor tudgal1001 Data 17 noiembrie 2013 18:19:29
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
using namespace std;

int arb[30005];

void update (int nod, int st, int dr, int a, int sum)
{
    if (st==dr)
        arb[nod]+=sum;
    else
    {
        int mid=(st+dr)/2;
        if (a<=mid)
            update(2*nod, st, mid, a, sum);
        else
            update(2*nod+1, mid+1, dr, a, sum);
        arb[nod]=arb[2*nod]+arb[2*nod+1];
    }
}

int query (int nod, int st, int dr, int a, int b)
{
    int sum=0;
    if (a<=st && dr<=b)
        sum+=arb[nod];
    else
    {
        int mid=(st+dr)/2;
        if (a<=mid)
            sum+=query(2*nod,st,mid,a,b);
        if (b>mid)
            sum+=query(2*nod+1,mid+1,dr,a,b);
    }
    return sum;
}

int main()
{
    int n,m,tip,i,x,y;
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1; i<=n; i++)
        scanf("%d",&x), update(1,1,n,i,x);
    for (i=1; i<=m; i++)
    {
        scanf("%d%d%d",&tip,&x,&y);
        if (!tip)
            update(1,1,n,x,-y);
        else
            printf("%d\n",query(1,1,n,x,y));
    }
    return 0;
}