Pagini recente » Cod sursa (job #1058443) | Cod sursa (job #2796980) | Cod sursa (job #706950) | Cod sursa (job #1469829) | Cod sursa (job #2786504)
#include <fstream>
using namespace std;
ifstream cin ("datorii.in" );
ofstream cout ("datorii.out" );
#define NMAX 15000
int aint[NMAX * 4 + 1];
void update1( int poz, int val ) {
aint[poz] = val;
while ( poz > 1 ) {
if (poz % 2 == 0 )
aint[poz / 2] = aint[poz] + aint[poz + 1];
else
aint[poz / 2] = aint[poz - 1] + aint[poz];
poz /= 2;
}
}
int query(int ind, int csta, int cdra, int cstq, int cdrq ) {
if ( cstq <= csta && cdra <= cdrq ) {
return aint[ind];
} else {
int aux = 0;
//comparam cu mijlocul
if ( cstq <= (csta + cdra) / 2 ) {
aux = aux + query(ind * 2, csta, (csta + cdra) / 2, cstq, cdrq);
}
if ( cdrq > (csta + cdra) / 2 ) {
aux = aux + query(ind * 2 + 1, (csta + cdra) / 2 + 1, cdra, cstq, cdrq );
}
return aux;
}
}
int main() {
int n, m, i, x, p, op, a, b;
cin >> n >> m;
p = 1;
while ( p <= n ) {
p = p * 2;
}
for ( i = 0; i < n; i++ ) {
cin >> x;
update1( p + i, x );
}
for ( i = 0; i < m; i++ ) {
cin >> op >> a >> b;
if ( op == 0 ) {
update1( p + a - 1, b );
}
else {
cout << query( 1, 1, p, a, b ) << "\n";
}
}
return 0;
}