Pagini recente » Cod sursa (job #618485) | Cod sursa (job #3270430) | Cod sursa (job #320459) | Cod sursa (job #1789015) | Cod sursa (job #3186021)
#include <fstream>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
const int nmax= 15000;
const int pmax= 16384;
int arbint[pmax*2+1];
void build( int x, int p ) {
if ( x<p ) {
build(x*2, p), build(x*2+1, p);
arbint[x]= arbint[x*2]+arbint[x*2+1];
}
}
void update( int x, int y ) {
arbint[x]= y;
for ( int i= x/2; i>0; i/= 2 ) {
arbint[i]= arbint[i*2]+arbint[i*2+1];
}
}
int query( int k, int a, int b, int x, int y ) {
if ( x<=a && b<=y ) {
return arbint[k];
} else if ( y<a || x>b ) {
return 0;
}
return query(k*2, a, (a+b)/2, x, y)+query(k*2+1, (a+b)/2+1, b, x, y);
}
int main() {
int n, m, p;
fin>>n>>m;
for ( p= pmax; p>=n; p/= 2 ) ; p*= 2;
for ( int i= 0; i<n; ++i ) {
fin>>arbint[p+i];
}
build(1, p);
for ( int i= 0, t, x, y; i<m; ++i ) {
fin>>t>>x>>y;
if ( t==0 ) {
update(p+x-1, arbint[p+x-1]-y);
} else {
fout<<query(1, p, p*2-1, p+x-1, p+y-1)<<"\n";
}
}
return 0;
}