Cod sursa(job #29263)

Utilizator lucibitLucian Onea lucibit Data 8 martie 2007 20:34:01
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<math.h>
#define MaxN 15001
int N,a[MaxN];
long M,S[MaxN],c[MaxN];

int main ()
{FILE *f,*g;int i;
	long j;
  int P;
 f=fopen("datorii.in","r");
 g=fopen("datorii.out","w");
 fscanf(f,"%d %ld\n",&N,&M);
 S[0]=0;
 short int poz;
 for(i=1;i<=N;i++)
 {fscanf(f,"%d",&a[i]);S[i]=S[i-1]+a[i];
  poz=0;
	while ((i&(1<<poz))==0) poz++;
	P=i-pow(2,poz);
	c[i]=S[i]-S[P];
  }


 long S1,S2;
 short int O;
 int T,V;
 int q,p;
 for(j=1;j<=M;j++)
 {fscanf(f,"%d",&O);
  if(O==0) {fscanf(f,"%d %d\n",&T,&V);
			  	poz=0;
				while (T<=N)
				 {c[T]-=V;
					while ((T&(1<<poz))==0) poz++;
					T+=pow(2,poz);
					poz++;
					}
				  }
	else {  fscanf(f,"%d %d\n",&p,&q);
				S1=S2=0;
				p--;
				poz=0;
				while (p>0)
				{S1+=c[p];
				 while ((p&(1<<poz))==0)poz++;
				 p-=pow(2,poz);

				 poz++;
				 }
				 poz=0;
				 while (q>0)
				 {S2+=c[q];
				  while ((q&(1<<poz))==0) poz++;
				  q-=pow(2,poz);
				  poz++;
				  }
				fprintf(g,"%ld\n",S2-S1);
				}

  }
fclose(f);
fclose(g);
return 0;}