Pagini recente » Cod sursa (job #2032611) | Cod sursa (job #1892903) | Cod sursa (job #3276210) | 123124 | Cod sursa (job #469193)
Cod sursa(job #469193)
#include <cstdio>
using namespace std;
#define ZEROS(x) ( (x) & (-x) )
int aib[15001],vec[15001];
int nr , n , m , o , p;
void update(int p , int nr ) {
vec[ p ] += nr;
if( vec[ p ] < 0 )
nr += vec[ p ] , vec[ p ] = 0;
aib[ p ] += nr;
for( int i = p + ZEROS(p) ; i <= n ; i += ZEROS(i) )
aib[ i ] += nr;
}
int query(int a, int b) {
int sum = 0;
for( int i = b ; i >= a ; )
if( i - ZEROS(i) + 1 >= a )
sum += aib[ i ] , i -= ZEROS(i);
else
sum += vec[ i ] , i--;
return sum;
}
int main() {
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i = 1 ; i <= n ; i++ ) {
scanf("%d",&nr);
vec[i] = nr;
update( i , nr );
}
for(int i = 1 ; i <= m ; i++ ) {
scanf("%d %d %d", &o, &p, &nr);
if( o == 0 ) update( p , -nr );
if( o == 1 ) printf("%d\n", query( p , nr ) );
}
return 0;
}