Cod sursa(job #2803757)

Utilizator schizofrenieShallan Davar schizofrenie Data 20 noiembrie 2021 13:42:44
Problema Datorii Scor 60
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <assert.h>
#include <stdio.h>

#define MAXN 15000

int n;
int aib[MAXN + 1];

void
update (int poz, int val) {
	int i;
	for (i = poz; i <= n; i += (i & (-i)))
		aib[i] += val;
}

int
compute (int poz) {
	int ret = 0;
	int i;
	for (i = poz; i > 0; i -= (i & (-i)))
		ret += aib[i];
	return ret;
}

int main () {
	int q;
	int i;

	assert(freopen("datorii.in", "r", stdin));
	assert(freopen("datorii.out", "w", stdout));

	assert(scanf("%d %d", &n, &q) == 2);

	for (i = 0; i != n; ++ i) {
		int a;
		assert(scanf(" %d", &a) == 1);

		update(i + 1, a);
	}

	for (i = 0; i != q; ++ i) {
		int tip, a, b;

		assert(scanf(" %d %d %d", &tip, &a, &b) == 3);

		switch (tip) {
		case 0:
			update(a, -b);
			break;
		case 1:
			printf("%d\n", compute(b) - compute(a - 1));
			break;
		default:
			assert(0);
		}
	}
}