Pagini recente » Cod sursa (job #399197) | Cod sursa (job #2678557) | Cod sursa (job #2577159) | Cod sursa (job #2369394) | Cod sursa (job #1393834)
#include <iostream>
#include <cstdio>
using namespace std;
#define n_max 15005
int arb[4*n_max] ;
int n,m ;
int a,b ;
int sum ;
void actualizare( int nod , int st , int dr )
{
if ( st == dr )
{
arb[nod] -= b ;
return ;
}
int mij = ( st + dr ) / 2 ;
if ( a <= mij )
actualizare( 2 * nod , st , mij ) ;
else
actualizare( 2 * nod + 1 , mij + 1 , dr ) ;
arb[nod] = arb[2*nod] + arb[2*nod+1] ;
}
void citire()
{
scanf( "%d %d" , &n , &m ) ;
for ( a = 1 ; a <= n ; a ++ )
{
scanf( "%d" , &b ) ;
b = -b ;
actualizare(1,1,n) ;
}
}
void interogare( int nod , int st , int dr )
{
if ( a <= st && dr <= b )
{
sum += arb[nod] ;
return ;
}
int mij = ( st + dr ) / 2 ;
if ( a <= mij )
interogare( 2 * nod , st , mij ) ;
if ( b > mij )
interogare( 2 * nod + 1 , mij + 1 , dr ) ;
}
void rezolvare()
{
int c ;
for ( int i = 1 ; i <= m ; i ++ )
{
scanf( "%d %d %d" , &c , &a , &b ) ;
if ( c == 0 )
actualizare(1,1,n) ;
else
{
sum = 0 ;
interogare(1,1,n) ;
printf( "%d\n" , sum ) ;
}
}
}
int main()
{
freopen( "datorii.in" , "r" , stdin ) ;
freopen( "datorii.out" , "w" , stdout ) ;
citire() ;
rezolvare() ;
return 0;
}