Cod sursa(job #944012)

Utilizator gegeadDragos Gegea gegead Data 27 aprilie 2013 09:20:50
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#define inf 1000000001
int c,s,n;
int t[15001];



void actualizare(int poz, int val)
{
    c=0;
    while(poz<=n)
    {
        t[poz]+=val;
        while(!(poz&(1<<c)))
              ++c;
        poz+=(1<<c);
        c+=1;
    }
}



int interogare(int poz)
{
    c=0;s=0;
    while(poz>0)
    {
        s+=t[poz];
        while(!(poz&(1<<c)))
              ++c;
        poz-=(1<<c);
        c+=1;
    }
    return s;
}



int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int i,m,x,a,b;
    bool p;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;++i)
    {
        scanf("%d",&x);
        actualizare(i,x);
    }
    for(i=1;i<=m;++i)
    {
        scanf("%d",&p);
        if(p==0)
        {
            scanf("%d%d",&a,&b);
            actualizare(a,-b);
        }
        else
        {
            scanf("%d%d",&a,&b);
            printf("%d\n",interogare(b)-interogare(a-1));
        }
    }
    return 0;
}