Mai intai trebuie sa te autentifici.
Cod sursa(job #113887)
Utilizator | 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;
}