Pagini recente » Cod sursa (job #2719202) | Cod sursa (job #2884442) | Rating Motoasca Alexandru-Lucian (AlexMoto2006) | Cod sursa (job #3248435) | Cod sursa (job #2189222)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int nmax= 15000;
const int pmax= 32768;
int n, m, p2;
int arb[pmax+1];
void arb_build( int x ) {
if ( x*2<p2 ) {
arb_build(x*2);
arb_build(x*2+1);
}
arb[x]= arb[x*2]+arb[x*2+1];
}
void arb_update( int x, int y ) {
arb[p2+y-1]+= x;
for ( int i= (p2+y-1)/2; i>0; i/= 2 ) {
arb[i]= arb[i*2]+arb[i*2+1];
}
}
int arb_query( int x, int l, int r, int a, int b ) {
if ( r<a || b<l ) {
return 0;
} else if ( a<=l && r<=b ) {
return arb[x];
} else {
return arb_query(x*2, l, (l+r)/2, a, b)+arb_query(x*2+1, (l+r)/2+1, r, a, b);
}
}
int main( ) {
fin>>n>>m;
for ( p2= 1; p2<n; p2*= 2 ) ;
for ( int i= 1, x; i<=n; ++i ) {
fin>>x;
arb[p2+i-1]= x;
}
arb_build(1);
for ( int x, y, z; m>0; --m ) {
fin>>x>>y>>z;
if ( x==0 ) {
arb_update(-z, y);
} else {
fout<<arb_query(1, 1, p2, y, z)<<"\n";
}
}
return 0;
}