Cod sursa(job #50099)

Utilizator wazupPricop Mircea wazup Data 6 aprilie 2007 20:50:41
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
long c[15000],n,m,op,p,q,i,poz,s,s2;
int main()
{
FILE *fin,*fout;
fin=fopen("datorii.in","rt");
fout=fopen("datorii.out","wt");
fscanf(fin,"%ld %ld",&n,&m);
for (i=1;i<=n;i++)
  { fscanf(fin,"%ld ",&q);
    poz=0;
    p=i;
    while (p<=n)
     {
      c[p]+=q;
      while ((p&(1<<poz))==0)
	 poz++;
      p=p+(1<<poz);
      poz++;
     }
  }
for (i=1;i<=m;i++)
  { fscanf(fin,"%ld %ld %ld ",&op,&p,&q);
    if (op==0)
       {
	poz=0;
	while (p<=n)
	 {
	  c[p]-=q;
	  while ((p&(1<<poz))==0)
		 poz++;
	  p=p+(1<<poz);
	  poz++;
	 }
       }
    if (op==1)
       {s=0;
	poz=0;
	while (q>0)
	 { s+=c[q];
	   while ((q&(1<<poz))==0)
		  poz++;
	   q=q-(1<<poz);
	   poz++;
	 }
	poz=0;
	p--;
	s2=0;
	while (p>0)
	 { s2+=c[p];
	   while ((p&(1<<poz))==0)
		  poz++;
	   p=p-(1<<poz);
	   poz++;
	 }
       fprintf(fout,"%ld\n",s-s2);
       }

  }
return 0;
}