Cod sursa(job #611947)

Utilizator PetcuIoanPetcu Ioan Vlad PetcuIoan Data 4 septembrie 2011 20:58:58
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
int a[15100];
inline int zero(int x)
{
    int t=0;
    if (x==0)
        return 0;
    while(x%2==0)
    {
        t++;
        x>>=1;
    }
    return t;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int n,m,i,j,x,t,y,sum1,sum2;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&x);
        j=i;
        while(j<=n)
        {
            a[j]+=x;
            j+=1<<zero(j);
        }
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d",&t);
        if(t==0)
        {
            scanf("%d%d",&x,&y);
            while(x<=n)
            {
                a[x]-=y;
                x+=1<<zero(x);
            }
        }
        else
        {
            scanf("%d%d",&x,&y);
            x--;
            sum1=sum2=0;
            while(x)
            {
                sum1+=a[x];
                x-=1<<zero(x);
            }
            while(y)
            {
                sum2+=a[y];
                y-=1<<zero(y);
            }
            printf("%d\n",sum2-sum1);
        }
    }
    return 0;
}