Cod sursa(job #30140)

Utilizator bog_bejBeju Bogdan bog_bej Data 12 martie 2007 22:44:19
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include<stdio.h>
#define lsb(x) (x)&((x)^((x)-1))
int s[15002],n,m;

int sum(int start, int end)
{ int sum=0, slow=0, i;
  for(i=end;i;i-=lsb(i))
    sum+=s[i];
  for(i=start-1;i;i-=lsb(i))
     slow+=s[i];
  return sum-slow;
}

void mod(int poz, int val)
{ int i;
  for(i=poz;i<=n;i+=lsb(i))
    s[i]-=val;
}

int main()
{ int a,b,op,i;
  freopen("datorii.in","rt",stdin);
  freopen("datorii.out","wt",stdout);
  scanf("%d %d",&n,&m);
  for(i=1;i<=n;i++) 
  { scanf("%d",&a);
    mod(i, -a);
  }
  for(i=0;i<m;i++)
  { scanf("%d %d %d",&op,&a,&b);
    if(!op) mod(a, b);
    else printf("%d\n",sum(a,b));
  }
  return 0;
}