Pagini recente » Cod sursa (job #2186354) | Cod sursa (job #1472691) | Cod sursa (job #1097707) | Cod sursa (job #2430853) | Cod sursa (job #113888)
Cod sursa(job #113888)
/*
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;
}