Cod sursa(job #204098)

Utilizator MisterXGrigore MisterX Data 21 august 2008 19:55:51
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <stdio.h>   
#define DIM 15003   
long int A[DIM], v[DIM],S[DIM];   
long 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,"%ld %ld",&n,&m);   
  
  for (i=1;i<=n;i++) {   
    fscanf(f,"%ld",&S[i]);   
    j=i;   
    while ((j&1) == 0) {   
      v[i]++;   
      j=j>>1;   
    }   
  
  }   
  
  for (i=1;i<=n;i++) {   
  
  
    a=S[i];b=i;   
    while (b<=n) {   
      A[b]+=a;   
      b+=(1<<v[b]);   
    }   
  }   
  
  
  for (k=1;k<=m;k++) {   
    fscanf(f,"%ld %ld %ld",&t,&a,&b);   
    if (t==0) {   
      aux=a;   
      a=b;   
      b=aux;   
      a=-a;   
      while (b<=n) {   
    A[b]+=a;   
    b+=(1<<v[b]);   
      }   
    } else {   
      x = a-1;   
      sum1 = 0;   
      while (x) {   
        sum1+=A[x];   
        x-=(1<<v[x]);   
      }   
      x = b;   
      sum2 = 0;   
      while (x) {   
        sum2+=A[x];   
        x-=(1<<v[x]);   
      }   
      fprintf(g,"%ld\n",sum2-sum1);   
    }   
  
  }   
  fclose(f);   
  fclose(g);   
  return 0;   
}  
#include <stdio.h>
#define DIM 15003
long int A[DIM], v[DIM],S[DIM];
long 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,"%ld %ld",&n,&m);

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

  }

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


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


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

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