Cod sursa(job #900326)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 28 februarie 2013 19:07:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>

using namespace std;
int arb[100010],i,j,op,a,b,poz,x,n,m;
void actualizare (int nod, int st, int dr)
{
    if (st==dr)
    {
        arb[nod]+=x;
        return;
    }
    int m=(st+dr)/2;

    if (poz<=m) actualizare (nod*2,st,m);
    else actualizare (nod*2+1,m+1,dr);

    arb[nod]=arb[nod*2]+arb[nod*2+1];
}


int interogare (int nod, int st, int dr)
{
    if (st>=a && dr<=b)
    {
        return arb[nod];
    }
    int x1=0;
    int x2=0;
    int m=(st+dr)/2;
    if (a<=m)
      x1=interogare(nod*2,st,m);
    if (b>m)
      x2=interogare(nod*2+1,m+1,dr);
    return x1+x2;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for (i=1; i<=n; i++)
    {
        scanf("%d ",&x);
        poz=i;
        actualizare(1,1,n);
    }

    for (i=1; i<=m; i++)
    {
        scanf("%d %d %d\n",&op,&a,&b);
        if (op==0)
        {
            poz=a;
            x=-b;
            actualizare(1,1,n);
        }
        if (op==1)
        {
            printf("%d\n",interogare(1,1,n));

        }

    }
    return 0;
}