Cod sursa(job #117959)

Utilizator DjSefuWrong name DjSefu Data 22 decembrie 2007 20:59:41
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
FILE *f=fopen("datorii.in","r"),
     *g=fopen("datorii.out","w");
long a[15009],i,j,n,m,k,p,q,po,s;
int main()
{ fscanf(f,"%ld %ld",&n,&m);
  for(i=1;i<=n;++i) { fscanf(f,"%ld",&k);
		      a[i]=k+a[i-1];
		    }
  for(i=1;i<=m;++i) { fscanf(f,"%ld %ld %ld",&k,&p,&q);
		      if(k==0) { po=0;
				 while(p<=n){ a[p]-=q;
					      while(p&1<<po) ++po;
					      p+=1<<po;
					      ++po;
					    }			
			       }
		      else { s=0;po=0;
			     while(q>0) { s+=a[q];
					  while(q&1<<po) ++po;
					  q-=1<<po;
					  ++po;
					}
			     --p;
			     po=0;
			     while(p>0) { s-=a[p];
					  while(p&1<<po) ++po;
					  p-=1<<po;
					  ++po;
					}
			     fprintf(g,"%ld\n",s);
			   }		 
		    }
  fclose(f);
  fclose(g);
  return 0;
}