Mai intai trebuie sa te autentifici.

Cod sursa(job #113887)

Utilizator vladcoderVlad Ion vladcoder Data 11 decembrie 2007 20:47:15
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
/*
  Problem 007 - Datorii
  Sursa : Infoarena
  Teorie : Arbori indexati binar
  */
  

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NMAX 15002

int A[NMAX], N, M, i, aux, p, q, cod;


void update( int p, int value ) {
  
     int i = p;
  
     while ( i <= N ) {
           A[i] += value;
           i += ( ( i - 1 ) ^ i ) & i;
     }
}

int query( int p ) {
    
    int i = p, sum = 0;
    
    while ( i > 0 ) {
          sum += A[i];
          i -= ( ( i - 1 ) ^ i ) & i;
    }      
    return sum;
}

 int main() {

     FILE * fin, * fout;
     fin = fopen( "datorii.in", "r" );
     fout = fopen( "datorii.out", "w" );
     fscanf( fin, "%d %d\n", &N, &M );
     memset( A, 0, NMAX * sizeof(int) );
     for( i = 0; i < N; i++ ) {
          fscanf( fin, "%d", &aux );
          update( i+1, aux );
     }
     for( i = 0; i < M; i++ ) {
      
          fscanf( fin, "%d %d %d\n", &aux, &p, &q );
          if ( aux == 0 ) update( p, -q );
            else
                 fprintf( fout, "%d\n", query( q ) - query( p - 1 ) );
     }        
     fclose( fin );
     fclose( fout );
     return 0;
}