Cod sursa(job #313779)

Utilizator IlieeUngureanu Ilie Iliee Data 9 mai 2009 18:19:59
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#define bit(x) ( (x^(x-1))&x )
int aib[15001],i,n,m,a,b,op;
void add(int x,int val)
{
    int i;
    for(i=x; i<=n; i+=bit(i))
     aib[i]+=val;
}
void minus(int x,int val)
{
    int i;
    for(i=x; i<=n; i+=bit(i))
     aib[i]-=val;
}
int compute(int x)
{
    int i,ret=0;
    for(i=x; i>0; i-=bit(i))
     ret+=aib[i];
    return ret;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(i=1; i<=n; i++) scanf("%d",&a),add(i,a);
    for(; m>0; m--)
    {
        scanf("%d %d %d",&op,&a,&b);
        if(op==0) minus(a,b);
        else printf("%d\n",compute(b)-compute(a-1));
    }
    return 0;
}