Pagini recente » Cod sursa (job #2451829) | Cod sursa (job #2227668) | Betasah | Cod sursa (job #143369) | Cod sursa (job #2563943)
#include <iostream>
#include <fstream>
#define Nmax 15000
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n,m,poz,val,qs,qf;
int a[ 4 * Nmax + 66 ],b[Nmax];
void citire()
{
fin>>n>>m;
for ( int i = 1 ; i <= n ; i ++ )
fin>>b[ i ];
}
void creare( int s , int d , int p )
{
if( s == d )
{
a[ p ] = b[ s ] ;
return;
}
int mid = ( s + d ) / 2;
creare( s , mid , 2 * p );
creare( mid + 1 , d , 2 * p + 1 );
a[ p ] = a[ 2 * p ] + a[ 2 * p + 1];
}
void update( int s , int d , int p )
{
if ( s == d )
{
a[ p ] -= val ;
return ;
}
int mid = ( s + d ) / 2;
if( poz <= mid )
update( s , mid , 2 * p );
else
update( mid + 1 , d , 2 * p + 1 );
a[p] = a[ 2 * p ] + a[ 2 * p + 1 ];
}
int querry ( int s , int d , int p )
{
if( qs <= s && d <= qf )
return a[ p ];
if( s > qf || d < qs )
return 0 ;
int mid = ( s + d ) / 2 ;
return querry( s , mid , 2 * p) + querry( mid + 1 , d , 2 * p + 1 );
}
int main()
{
citire();
creare( 1 , n , 1 );
int i,task;
for ( i = 1 ; i <= m ; i++ )
{
fin >> task;
if( task == 1)
{
fin>>qs>>qf;
fout<<querry( 1 , n , 1 )<<"\n";
}
else
{
fin>>poz>>val;
update( 1 , n , 1 );
}
}
return 0;
}