Cod sursa(job #112898)

Utilizator mithyPopovici Adrian mithy Data 8 decembrie 2007 11:15:31
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <stdio.h>
#define NMax 20000

int n, m;
int aib[NMax];

FILE *f, *g;

void citire();
void insert( int dr );
int sum( int st, int dr );

int main()
{
   citire();
   return 0 ;
}

int sum( int st, int dr )
{
   int s1=0, s2=0, poz;

   poz = 0;
   while ( dr > 0 )
   {
      s1 += aib[dr];
      while ( (dr & (1 << poz)) == 0 )
              poz++;
      dr -= (1 << poz) ;
   }

   poz = 0;
   st--;
   while ( st > 0 )
   {
      s2 += aib[st];
      while ( (st & (1 << poz)) == 0 )
              poz++;
      st -= (1 << poz) ;
   }

   return s1-s2;
}
void insert( int st, int elem )
{
   int poz = 0;
   while ( st <= n )
   {
      aib[st] += elem;
      while ( (st & (1 << poz)) == 0 )
              poz++;
      st += (1 << poz) ;
   }
}
void citire()
{
   int i, aux, cod, aux1, aux2;
   f = fopen( "datorii.in", "rt" );
   g = fopen( "datorii.out", "wt" );

   fscanf ( f, "%d %d", &n, &m );

   for (i=1; i<=n; i++)
   {
      fscanf( f, "%d", &aux );
      insert( i, aux );
   }

   for (i=0; i<m; i++)
   {
      fscanf( f, "%d %d %d", &cod, &aux1, &aux2 );
      if ( cod == 0 )
         insert( aux1, -aux2 );
      else
         fprintf( g, "%d\n", sum( aux1, aux2 ) );
   }

}