Cod sursa(job #199365)

Utilizator marinMari n marin Data 18 iulie 2008 13:42:24
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#define DIM 15003
int A[DIM], v[DIM],S[DIM];
int t,a,b,sum1,sum2,k,i,j,x,n,m,s,aux;
int main(){
  FILE *f = fopen("datorii.in","r");
  FILE *g = fopen("datorii.out","w");
  fscanf(f,"%d %d",&n,&m);

  for (i=1;i<=n;i++) {
    fscanf(f,"%d",&S[i]);
    j=i;
    while (j%2 == 0) {
      v[i]++;
      j=j>>1;
    }

  }

  for (i=1;i<=n;i++) {


    a=S[i];b=i;
    while (b<=n) {
      A[b]+=a;
      b=b+(1<<v[b]);
    }
  }


  for (k=1;k<=m;k++) {
    fscanf(f,"%d %d %d",&t,&a,&b);
    if (t==0) {
      aux=a;
      a=b;
      b=a;
      a=-a;
      while (b<=n) {
	A[b]+=a;
	b=b+(1<<v[b]);
      }
    } else {
	  x = a-1;
	  sum1 = 0;
	  while (x) {
	    sum1+=A[x];
	    x = x-(1<<v[x]);
	  }
	  x = b;
	  sum2 = 0;
	  while (x) {
	    sum2+=A[x];
	    x = x-(1<<v[x]);
	  }
	  fprintf(g,"%d\n",sum2-sum1);
    }

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