Pagini recente » Cod sursa (job #3293075) | Cod sursa (job #2970710) | Cod sursa (job #1449265) | Cod sursa (job #2772192) | Cod sursa (job #3149974)
#include <fstream>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
long long seg_tree [ 900005 ];
long long v[ 200005];
void build (long long st, long long dr, long long nod )
{
if ( st == dr )
{
seg_tree [ nod ] = v [st ] ;
}
else
{
long long mid = ( st + dr ) / 2;
build( st, mid, nod * 2 );
build ( mid + 1, dr, nod * 2 + 1) ;
seg_tree [ nod ] += seg_tree [ nod * 2 ] + seg_tree [ nod * 2 + 1 ] ;
}
}
void update ( long long st, long long dr, long long nod, long long target )
{
if ( st == dr )
{
seg_tree [ nod ] = v [ st ];
}
else
{
long long mid = ( st + dr) / 2;
if ( mid >= target )
{
update ( st, mid, nod * 2, target );
}
else if ( mid < target )
{
update ( mid + 1, dr, nod * 2 + 1, target );
}
seg_tree [ nod ] = seg_tree[ nod * 2 ] + seg_tree [ nod * 2 + 1];
}
}
long long query ( long long st, long long dr, long long nod, long long l, long long r )
{
if ( st >= l && dr <= r )
{
return seg_tree [ nod ];
}
else if ( st > r || dr < l )
return 0 ;
else
{
long long mid = ( st + dr) / 2 ;
return query ( st, mid, nod * 2, l, r ) + query ( mid + 1, dr, nod * 2 + 1, l, r );
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n, q ;
cin >> n >> q ;
for ( int i = 1; i <= n ; i ++ )
{
cin >> v[ i ] ;
}
build ( 1, n, 1 );
for ( int i = 1; i <= q; i ++ )
{
int tip ;
cin >> tip ;
tip ++ ;
if ( tip == 1 )
{
long long a, b ;
cin >> a >> b ;
v [a ] -= b ;
update ( 1, n, 1, a );
}
else
{
int l, r ;
cin >> l >> r ;
cout << query ( 1, n, 1, l, r ) << '\n';
}
}
return 0;
}