Pagini recente » Cod sursa (job #2194195) | Cod sursa (job #327756) | Cod sursa (job #464763) | Cod sursa (job #1893811) | Cod sursa (job #3252288)
#include <iostream>
#include <fstream>
#define NMAX 15000
#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 - 1;
if( st % BCKT == 0 ) // e inc de bucket
intleft--; // consideram si bucketul in care se afla
if( ( dr + 1 ) % BCKT == 0 || dr == n - 1 ) // e final de bucket
intright++;
int sum = 0;
while( st < intleft * BCKT ) {
sum += a[st];
st++;
}
while( dr >= ( intright + 1 ) * BCKT ) {
sum += a[dr];
dr--;
}
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;
}