Pagini recente » Cod sursa (job #1205597) | Borderou de evaluare (job #2787029) | Cod sursa (job #126297) | Cod sursa (job #2805103) | Cod sursa (job #1341157)
#include <cstdio>
using namespace std;
#define Nmax ( 1 << 14 ) + 1
#define LSB(x) ( x & ( -x ) )
FILE *f = fopen ( "datorii.in", "r" );
FILE *g = fopen ( "datorii.out", "w" );
int aib[Nmax], aibSize = 1;
void Adauga ( int poz, int val ){
for ( int i = poz; i <= aibSize; i += LSB(i) )
aib[i] += val;
}
void Plateste ( int poz, int val ){
for ( int i = poz; i <= aibSize; i += LSB(i) )
aib[i] -= val;
}
int Sum ( int x ){
int s = 0;
while ( x ){
s += aib[x];
x -= LSB(x);
}
return s;
}
int Query ( int st, int dr ){
return Sum ( dr ) - Sum ( st - 1 );
}
int main(){
int N, M, x, a, b;
fscanf ( f, "%d%d", &N,&M );
while ( aibSize < N )
aibSize *= 2;
for ( int i = 1; i <= N; ++i ){
fscanf ( f, "%d", &x );
Adauga ( i, x );
}
for ( int i = 1; i <= M; ++i ){
fscanf ( f, "%d%d%d", &x, &a, &b );
if ( x == 0 )
Plateste ( a, b );
else
fprintf ( g, "%d\n", Query ( a , b ) );
}
return 0;
}