Cod sursa(job #114484)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 14 decembrie 2007 15:02:24
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#include <string.h>
#define N 15001
int main ()
{FILE *f,*ff;
 f=fopen("datorii.in","r");
 ff=fopen("datorii.out","w");
 unsigned long n,m,i,j,x,p,q,s1,s2;
 unsigned long *a,b[N];
 fscanf(f,"%ld %ld",&n,&m);
 a=new unsigned long[n+1];
 memset(a,0,(n+1)*sizeof(long));
 memset(b,0,N*sizeof(long));

 for (i=1;i<=n;i++)
 {fscanf(f,"%ld",&x);
  a[i]=a[i-1]+x;
 }
 for (i=1;i<=n;i++)
 {b[i]=a[i]-a[i&(i-1)];
 }

 for (i=1;i<=m;i++)
 {fscanf(f,"%ld %ld %ld",&x,&p,&q);
  if(x==1)
  {p--;
   for (s1=0,j=p-((p-1)&p);j>=1;j/=2,p=p&(p-1))
   {s1+=b[p];}

   for (s2=0,j=q-((q-1)&q);j>=1;j/=2,q=q&(q-1))
   {s2+=b[q];}
   fprintf(ff,"%ld\n",s2-s1);
  }
  else
  {for (j=p;j<=n;j+=j-(j&(j-1)))
   {if(j<=n)
    b[j]-=q;
   }
  }
 }
 fclose(f);
 fclose(ff);
 return 0;
}