Cod sursa(job #1605336)

Utilizator aimrdlAndrei mrdl aimrdl Data 18 februarie 2016 22:15:02
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <iostream>

using namespace std;

int tree[15005];
int n;

void update (int x, int idx) {
	while (idx <= n) {
		tree[idx] += x;
		idx += (idx & -idx);
	}
}

int query (int idx) {
	int s = 0;
	while (idx >= 1) {
		s += tree[idx];
		idx -= (idx & -idx);
	}
	
	return s;
}

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