Cod sursa(job #60220)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 13 mai 2007 09:55:48
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>

#define maxn 15010

int a[maxn];
int n,m,x,y,z;

inline int LSB(int x)
{
    return (x^(x-1))&x;
}

void update(int x)
{
     while (x<=n)
     {
         a[x]-=y;
         x+=LSB(x);
     }
}

int query(int x)
{
     int rez=0;
     
     while (x>0)
     {
         rez+=a[x];
         x-=LSB(x);
     }

     return rez;
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);

    scanf("%d %d ",&n,&m);

    int i;

    for (i=1;i<=n;i++)
    {
       scanf("%d ",&y);
       y=-y;
       update(i);
    }

    for (i=1;i<=m;i++)
    {
        scanf("%d %d %d ",&z,&x,&y);

        if (z==0) update(x);
        else printf("%d\n",query(y)-query(x-1));
    }

    return 0;
}