Cod sursa(job #1436796)

Utilizator ASTELOTudor Enescu ASTELO Data 16 mai 2015 13:46:42
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<cstdio>
int n,i,j,m,c,k,v[15001],nr;
void add(int poz,int val)
    {
    int c=0;
    while(poz<=n)
        {
        v[poz]+=val;
        while(!(poz&(1<<c)))
            c++;
        poz+=(1<<c);
        c++;
        }
    }
void add1(int poz,int val)
    {
    int c=0;
    while(poz<=n)
        {
        v[poz]-=val;
        while(!(poz&(1<<c)))
            c++;
        poz+=(1<<c);
        c++;
        }
    }
int v1(int poz)
    {
    int c=0,s=0;
    while(poz>0)
        {
        s+=v[poz];
        while(!(poz&(1<<c)))
            c++;
        poz-=(1<<c);
        c++;
        }
    return s;
    }
int main ()
{
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
    {
    scanf("%d",&k);
    add(i,k);
    }
for(i=1;i<=m;i++)
    {
    scanf("%d",&nr);
    int q,qq;
    if(nr==0)
        {
        scanf("%d%d",&q,&qq);
        add1(q,qq);
        }
    else
        {
        scanf("%d%d",&q,&qq);
        printf("%d\n",v1(qq)-v1(q-1));
        }
    }
return 0;
}