Cod sursa(job #1248206)

Utilizator flaviusc11Fl. C. flaviusc11 Data 24 octombrie 2014 19:33:01
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

using namespace std;

int v[15005];
int aib[15005];
int n, m;

void update(int i, int val) {
	do {
		aib[i] += val;
		i = i | (i + 1);
	} while (i < n);
}

int query(int i) {
	int s = 0;
	do {
		s += aib[i];
		i = i - ((i ^ (i + 1) + 1) / 2);
	} while (i > 0);
	return s;
}


int main() {
	ifstream in("datorii.in");
	ofstream out("datorii.out");
	in >> n >> m;

	for (int i = 0; i < n; ++i) {
		in >> v[i];
		update(i, v[i]);
	}

	int operatie, v1, v2;
	for (int i = 0; i < m; ++i) {
		in >> operatie >> v1 >> v2;
		if (operatie == 0) 
			update(v1 - 1, -1*v2);
		else {
			if (v1 - 2 >= 0)
				out << query(v2 - 1) - query(v1 - 2) << '\n';
			else
				out << query(v2 - 1) << '\n';
		}
	}
	return 0;
}