Pagini recente » Cod sursa (job #2738245) | Cod sursa (job #1980979) | Cod sursa (job #3189883) | Cod sursa (job #1729494) | Cod sursa (job #3252298)
#include <iostream>
#include <fstream>
#define NMAX 20000
#define BCKT 128
using namespace std;
ifstream fin( "datorii.in" );
ofstream fout( "datorii.out" );
int a[NMAX];
int batog[BCKT];
int n;
void update( int poz, int val ) {
a[poz] += val;
batog[poz/BCKT] += val;
}
int query( int st, int dr ) {
int intleft = st / BCKT + 1, intright = dr / BCKT; // primul in exterior
if( st % BCKT == 0 ) // e inc de bucket
intleft--; // consideram si bucketul in care se afla
if( ( dr + 1 ) % BCKT == 0 ) // e final de bucket
intright++; // consideram si bucketul in care se afla
int sum = 0;
while( st < intleft * BCKT ) {
sum += a[st];
st++;
}
for( int i = intright * BCKT + BCKT - 1; i > dr; i-- )
sum -= a[i];
for( ; intleft <= intright; intleft++ )
sum += batog[intleft];
return sum;
}
int main() {
int m, type, t, val, l, r;
fin >> n >> m;
for( int i = 0; i < n; i++ ) {
fin >> a[i];
batog[i/BCKT] += a[i];
}
for( ; m; m-- ) {
fin >> type;
if( type == 0 ) {
fin >> t >> val;
update( t - 1, -val );
}
else {
fin >> l >> r;
fout << query( l - 1, r - 1 ) << '\n';
}
}
return 0;
}