Cod sursa(job #517139)

Utilizator Athena99Anghel Anca Athena99 Data 27 decembrie 2010 21:25:32
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>

long b[100000],aib[100000],i,j,x,y,n,st,fn,s,s1,s2,m,mij,c;

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%ld%ld",&n,&m);
    for(i=1;i<=n;i++)
    {
        j=i;
        b[i]=1;
        while(j%2==0)
        {
            b[i]*=2;
            j/=2;
        }
    }
    for(i=1;i<=n;i++)
    {
        scanf("%ld",&x);
        for(j=i;j<=n;j+=b[j])aib[j]+=x;
    }
    for(;m;m--)
    {
        scanf("%ld",&c);
        if(c==0)
        {
            scanf("%ld%ld",&x,&y);
            for(i=x;i<=n;i+=b[i])aib[i]-=y;
        }
        else
        if(c==1)
        {
            scanf("%ld%ld",&x,&y);
            s1=s2=0;
            for(i=x-1;i>=1;i-=b[i])s1+=aib[i];
            for(i=y;i>=1;i-=b[i])s2+=aib[i];
            s2=s2-s1;
            printf("%ld\n",s2);
        }
    }
    return 0;
}