Cod sursa(job #1497103)

Utilizator ipus1Stefan Enescu ipus1 Data 6 octombrie 2015 08:16:51
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
int v[15001];
int lsb(int k)
    {int i,x,q;
    q=k&(-k);
    x=1;
    for(i=1;i<q;i++)
        x*=2;
    return x;
    }
int main ()
{freopen ("datorii.in","r",stdin);
freopen ("datorii.out","w",stdout);
int n,m,i,j,k,x,p,s;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
    {scanf("%d",&x);
    j=i;
    while(j<=n)
        {v[j]+=x;
        j+=lsb(j);
        }
    }
for(i=1;i<=m;i++)
    {scanf("%d%d%d",&p,&k,&x);
    if(p==0)
        while(k<=n)
            {v[k]-=x;
            k+=lsb(k);
            }
    else
        {s=0;
        while(x>0)
            {s+=v[x];
            x-=lsb(x);
            }
        k--;
        while(k>0)
            {s-=v[k];
            k-=lsb(k);
            }
        printf("%d\n",s);
        }
    }
return 0;
}