Cod sursa(job #327337)

Utilizator ZethpixZethpix Zethpix Data 28 iunie 2009 15:08:05
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
FILE *f,*g;
long s1,s2,n,m,c,x,y,a[15001],b[15001],i,j,nr;
int main(){
 f=fopen("datorii.in","r");
 g=fopen("datorii.out","w");

fscanf(f,"%ld%ld",&n,&m);
 for (i=1;i<=n;i++){
  fscanf(f,"%ld",&a[i]);
  nr=0;
  while ((i&(1<<nr))==0) nr++;
  for (j=i-(1<<nr)+1;j<=i;j++) b[i]+=a[j];
 }
 for (i=1;i<=m;i++){
  fscanf(f,"%ld%ld%ld",&c,&x,&y);
  if (c==0){
   nr=0;
   while (x<=n){
    b[x]-=y;
    while ((x&(1<<nr))==0) nr++;
    x+=(1<<nr);
    nr++;
   }
  }
  if (c==1){
   nr=0;
   s1=0;
   s2=0;
   x--;
   while (x>0){
    s1+=b[x];
    while ((x&(1<<nr))==0) nr++;
    x-=(1<<nr);
    nr++;
   }
   nr=0;
   while (y>0){
    s2+=b[y];
    while ((y&(1<<nr))==0) nr++;
    y-=(1<<nr);
    nr++;
   }
   fprintf(g,"%ld\n",s2-s1);
  }
 }
 fclose(f);
 fclose(g);
 return 0;
}