Pagini recente » Cod sursa (job #3184548) | Cod sursa (job #141301) | Cod sursa (job #3283528) | Cod sursa (job #2989106) | Cod sursa (job #2803712)
#include <fstream>
using namespace std;
int aint[500005], n, p = 1;
void up ( int i, int val )
{
int poz = p - 1 + i;
aint[poz] -= val;
while ( poz > 1 )
{
poz /= 2;
aint[poz] = aint[poz * 2] + aint[poz * 2 + 1];
}
}
int query ( int ind, int csta, int cdra, int cstq, int cdrq )
{
if ( cstq <= csta && cdra <= cdrq )
return aint[ind];
else
{
int aux = 0;
if ( cstq <= ( csta + cdra ) / 2 )
aux += query ( ind * 2, csta, ( csta + cdra ) / 2, cstq, cdrq );
if ( cdrq > ( csta + cdra ) / 2 )
aux += query ( ind * 2 + 1, ( csta + cdra ) / 2 + 1, cdra, cstq, cdrq );
return aux;
}
}
int main()
{
ifstream cin ( "datorii.in" );
ofstream cout ( "datorii.out" );
int m, c, a, b, aux,t;
cin >> n >> m;
p = 1;
while ( p < n )
p *= 2;
for ( int i = p; i <= p + n - 1; i++ )
{
cin >> aint[i];
}
for ( int i = p + n; i <= p * 2; i++ )
{
aint[i] = 0;
}
for ( int i = p - 1; i >= 1; i-- )
{
aint[i] = aint[i * 2] + aint[i * 2 + 1];
}
for ( int i = 0; i < m; i++ )
{
cin >> c >> a >> b;
if ( c == 1 )
cout << query ( 1, 1, p, a, b ) << '\n';
else
{
up ( a, b );
}
}
return 0;
}