Cod sursa(job #1289724)

Utilizator ghimpeleSeteanu Radu ghimpele Data 10 decembrie 2014 11:06:14
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#define NMax 15010
#define zeros(x) (x & ( x - 1 ) ^ x)
const char IN[] = "datorii.in", OUT[] = "datorii.out";

int N, M;
int A[NMax], arb[NMax];

void update( int x, int val ) {
    for ( ; x <= N; x += zeros(x) )
		arb[x] += val;
}

int query( int x ) {
	int ret = 0;
	for (; x > 0; x -= zeros(x))
		ret += arb[x];
	return ret;
}

int main() {

	freopen(IN, "r", stdin);
	freopen(OUT, "w", stdout);

    scanf("%d%d", &N, &M);
    for ( int i = 1; i <= N; ++ i ) {
		int val;
		scanf("%d", &val);
		update(i, val);
    }

    for ( int i = 1; i <= M; ++ i ) {

		int t, x, y;

		scanf("%d%d%d", &t, &x, &y);
		if ( t == 0 )
			update(x, -y);
		else
			printf("%d\n", query(y) - query(x - 1));

    }

	return 0;
}