Pagini recente » Cod sursa (job #2727341) | Cod sursa (job #1327378) | Cod sursa (job #2960311) | Cod sursa (job #912871) | Cod sursa (job #164245)
Cod sursa(job #164245)
# include <iostream>
# include <fstream>
# include <algorithm>
using namespace std ;
int const maxn = 15000 ;
static int suma [ 3 * maxn ] ;
static int poz , val ;
void
actualizare ( int nod , int st , int dr ) {
if ( poz <= st && dr <= poz ) {
suma [ nod ] += val ;
} else {
int mij = ( st + dr ) / 2 ;
if ( poz <= mij ) actualizare ( 2 * nod , st , mij ) ;
if ( poz > mij ) actualizare ( 2 * nod + 1 , mij + 1 , dr ) ;
suma [ nod ] = suma [ 2 * nod ] + suma [ 2 * nod + 1 ] ;
}
}
int
interogare ( int nod , int st , int dr , int a , int b ) {
if ( a <= st && dr <= b ) {
return suma [ nod ] ;
} else {
int mij = ( st + dr ) / 2 ;
int x = 0 , y = 0 ;
if ( a <= mij ) x = interogare ( 2 * nod , st , mij , a , b ) ;
if ( b > mij ) y = interogare ( 2 * nod + 1 , mij + 1 , dr , a , b ) ;
return x + y ;
}
}
int
main ( ) {
ifstream sin ( "datorii.in" ) ;
ofstream sout ( "datorii.out" ) ;
int n , m ;
sin >> n >> m ;
fill ( & suma [ 0 ] , & suma [ sizeof ( suma ) / sizeof ( suma [ 0 ] ) ] , 0 ) ;
int i ;
for ( i = 1 ; i <= n ; i ++ ) {
sin >> val ; poz = i ;
actualizare ( 1 , 1 , n ) ;
}
for ( i = 1 ; i <= m ; i ++ ) {
int p , q , r;
sin >> r >> p >> q ;
if ( 0 == r ) {
poz = p ; val = - q ;
actualizare ( 1 , 1 , n ) ;
} else {
int v = interogare ( 1 , 1 , n , p , q ) ;
sout << v << endl ;
}
}
return 0 ;
}