Cod sursa(job #364618)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 16 noiembrie 2009 17:40:54
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
#define Nmax 15002

int c[Nmax];
int i,op,a,b,n,m;

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

int query(int i){
	int z=0,sum=0;
   while( i>0 ){
   	sum += c[i];
      while( !(i&(1<<z)) ) z++;
      i -= (1<<z);
      z++;
   }
   return sum;
}

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(i=1;i<=m;++i){
   	scanf("%d%d%d",&op,&a,&b);
      if(op == 0) add(a,-b);
      else printf("%d\n",query(b)-query(a-1));
   }

   fclose(stdin); fclose(stdout);
   return 0;
}