Cod sursa(job #114519)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 14 decembrie 2007 17:42:59
Problema Datorii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
#include <string.h>
#define N 15010
int main ()
{FILE *f,*ff;
 f=fopen("datorii.in","r");
 ff=fopen("datorii.out","w");
 long n,m,i,j,x,p,q,s1,s2,aux1,aux2;
 long a[N],b[N];
 fscanf(f,"%ld %ld",&n,&m);
 memset(a,0,sizeof(a));
 memset(b,0,sizeof(b));

 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)
  {aux1=p;aux2=q;
   p--;
   for (s1=0;p>0;p=p&(p-1))
   {s1+=b[p];}

   for (s2=0;q>0;q=q&(q-1))
   {s2+=b[q];}

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