Cod sursa(job #1605333)

Utilizator aimrdlAndrei mrdl aimrdl Data 18 februarie 2016 22:11:20
Problema Datorii Scor 0
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) {
	ios_base::sync_with_stdio(false);
	freopen("datorii.in", "r", stdin);
	freopen("datorii.out", "w", stdout);
	
	int m;
	
	cin >> n >> m;
	
	int temp;
	for (int i = 1; i <= n; ++i) {
		cin >> temp;
		update(temp, i);
	}
	
	int a, b, c;
	for (int i = 0; i < m; ++i) {
		cin >> a >> b >> c;
		if (a) {
			cout << query(c) - query(b-1) << "\n";
		} else {
			update(-c, b);
		}
	}
	
	return 0;
}