Cod sursa(job #482441)

Utilizator Addy.Adrian Draghici Addy. Data 3 septembrie 2010 16:05:30
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

const int NMAX = 15050;

int AIB[NMAX], n, m, i, tip, a, b;

void update (int, int, int);
int query (int);

int main () {
	
	freopen ("datorii.in", "r", stdin);
	freopen ("datorii.out", "w", stdout);
	
	scanf ("%d %d", &n, &m);
	
	for (i = 1; i <= n; i++) {
		scanf ("%d", &a);
		update (1, i, a);
	}
	
	for (i = 1; i <= m; i++) {
		scanf ("%d", &tip);
		
		if (tip == 0) {
			scanf ("%d %d", &a, &b);
			update (-1, a, b);
		}
		
		if (tip == 1) {
			scanf ("%d %d", &a, &b);
			printf ("%d\n", query (b) - query (a - 1));
		}
	}
	
	return 0;
}

void update (int semn, int i, int x) {
	
	while (i <= n) {
		AIB[i] += x * semn;
		i += i & (-i);
	}
}

int query (int i) {
	
	int s = 0;
	
	while (i > 0) {
		s += AIB[i];
		i -= i & (-i);
	}
	
	return s;
}