Cod sursa(job #847446)
#include <stdio.h>
#include <stdlib.h>
int arb[2000000];
int N , M , aux , a , b , op ;
void update ( int nod , int stanga , int dreapta )
{
if ( stanga == dreapta ) arb[nod] += b;
else
{
int mid = ( stanga + dreapta ) / 2;
if ( a <= mid ) update ( 2 * nod , stanga , mid );
else update ( 2 *nod + 1 , mid + 1 , dreapta );
arb[nod] = arb[2 * nod] + arb[2 * nod + 1];
}
}
void query ( int nod , int stanga , int dreapta )
{
if ( a <= stanga && dreapta <= b )
aux = aux + arb[nod];
else
{
int mid = ( stanga + dreapta ) / 2;
if ( a <= mid ) query ( 2 * nod , stanga , mid );
if ( mid < b ) query ( 2 * nod + 1 , mid + 1 , dreapta );
}
}
int main ()
{
FILE *fin , *fout;
fin = fopen ( "datorii.in" , "rt" );
fout = fopen ( "datorii.out" , "wt" );
fscanf ( fin , " %d %d " , &N , &M );
for ( int i = 1 ; i <= N ; i++ )
{
a = i;
fscanf ( fin , "%d" , &b );
update ( 1 , 1 , N );
}
for ( int i = 1 ; i <= M ; i++ )
{
fscanf ( fin , "%d %d %d " , &op , &a , &b );
if ( !op )
{
b = -b;
update ( 1 , 1 , N );
}
else
{
aux = 0;
query ( 1 , 1 , N );
printf ( "%d\n" , aux );
fprintf ( fout , "%d\n" , aux );
}
}
fclose ( fin );
fclose ( fout );
return 0;
}