Cod sursa(job #215960)

Utilizator RobybrasovRobert Hangu Robybrasov Data 21 octombrie 2008 20:38:27
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#define step (poz^(poz-1))&poz

int V[15010],n,m,i,a,b,val;
short int nr;

void update_plus(int poz, int val)
{
    while (poz<=n)
    {
        V[poz]+=val;
        poz+=step;
    }
}

void update_minus(int poz, int val)
{
    while (poz<=n)
    {
        V[poz]-=val;
        poz+=step;
    }
}

int query(int poz)
{
    int s=0;
    while (poz)
    {
        s+=V[poz];
        poz-=step;
    }
    return s;
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for (i=1; i<=n; i++)
    {
        scanf("%d",&val);
        update_plus(i,val);
    }
    for (i=1; i<=m; i++)
    {
        scanf("%d %d %d\n",&nr,&a,&b);
        if (nr) printf("%d\n",query(b)-query(a-1));
        else    update_minus(a,b);
    }

    return 0;
}