Pagini recente » Cod sursa (job #2890461) | Cod sursa (job #60876) | Cod sursa (job #53601) | Cod sursa (job #1662881) | Cod sursa (job #1096368)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin( "datorii.in" );
ofstream cout( "datorii.out" );
int n, m, op, a, b, poz, val, s, start, finish;
int v[ 1000001 ];
void update1( int nod,int st,int dr )
{
int mij;
if ( st == dr )
{
v[ nod ] = val;
return;
}
mij = ( st + dr ) / 2;
if ( poz <= mij ) update1( 2 * nod,st,mij );
else if ( poz > mij ) update1( 2 * nod + 1,mij + 1,dr );
v[ nod ] += val;
}
void update2( int nod,int st,int dr )
{
int mij;
if ( st == dr )
{
v[ nod ] -= val;
if ( v[ nod ] < 0 ) v[ nod ] = 0;
return;
}
mij = ( st + dr ) / 2;
if ( poz <= mij ) update2( 2 * nod,st,mij );
else if ( poz > mij ) update2( 2 * nod + 1,mij + 1,dr );
v[ nod ] -= val;
if ( v[ nod ] < 0 ) v[ nod ] = 0;
}
void query( int nod,int st,int dr )
{
int mij;
if ( start <= st && dr <= finish )
{
s += v[ nod ];
return;
}
mij = ( st + dr ) / 2;
if ( start <= mij ) query( 2 * nod,st,mij );
if ( mij < finish ) query( 2 * nod + 1,mij + 1,dr );
}
int main()
{
int i;
cin >> n >> m;
for ( i = 1; i <= n; i++ )
{
cin >> a;
poz = i;
val = a;
update1( 1,1,n );
}
for ( i = 1; i <= m; i++ )
{
cin >> op >> a >> b;
if ( op )
{
s = 0;
start = a;
finish = b;
query( 1,1,n );
cout << s << '\n';
}
else
{
poz = a;
val = b;
update2( 1,1,n );
}
}
}