Cod sursa(job #744315)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 8 mai 2012 13:07:53
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>

int a[15001],v[15001],n,m;

void update(int y,int z)
{
    int c=0;
    while (y<=n)
    {
        a[y]-=z;
        while (!(y&(1<<c))) ++c;
        y+=1<<c;
        ++c;
    }
}

int query(int y)
{
    int c=0,s=0;
    while (y>0)
    {
        s+=a[y];
        while (!(y&(1<<c))) ++c;
        y-=(1<<c);
        ++c;
    }
    return s;
}

int main()
{
    int i,x,y,z;
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;++i)
    {
        scanf("%d",&v[i]);
        v[i]+=v[i-1];
    }
    for (i=1;i<=n;++i)
        a[i]=v[i]-v[i-((i^(i-1))&i)];
    for (i=1;i<=m;++i)
    {
        scanf("%d%d%d",&x,&y,&z);
        if (x) printf("%d\n",query(z)-query(y-1));
        else update(y,z);
    }
    return 0;
}