Pagini recente » Cod sursa (job #185750) | Cod sursa (job #233564) | Cod sursa (job #226789) | Cod sursa (job #1734583) | Cod sursa (job #1724945)
#include <iostream>
#include <fstream>
using namespace std;
#define maxn 15100
ifstream f("datorii.in");
ofstream g("datorii.out");
int arb[3*maxn], n, m, val, poz, zi, suma, suma_int, a;
void up( int nod, int stanga, int dreapta )
{
if( stanga == dreapta )
{
arb[ nod ] += val;
}
else
{
int mij = ( stanga + dreapta ) / 2;
if( poz <= mij )
{
up( 2 * nod, stanga, mij );
}
else
{
up( 2 * nod + 1, mij + 1, dreapta );
}
arb[ nod ] = arb[ 2 * nod ] + arb[ 2 * nod + 1 ];
}
}
void que( int nod, int stanga, int dreapta )
{
if( zi <= stanga && dreapta <= suma )
{
suma_int += arb[nod];
}
else
{
int mij = ( stanga + dreapta ) / 2;
if( zi <= mij ) que( 2 * nod, stanga, mij );
if( suma > mij ) que( 2 * nod + 1, mij + 1, dreapta );
}
}
int main()
{
f >> n >> m;
for( int i = 1; i <= n ; i ++ )
{
f >> val;
poz = i;
up( 1, 1, n);
}
for( int i = 1; i <= m ; i ++ )
{
f >> a >> zi >> suma;
if ( a == 0 )
{
poz = zi;
val = -suma;
up( 1, 1, n );
}
else
{
suma_int = 0;
que( 1, 1, n );
g << suma_int << '\n';
}
}
return 0;
}