Cod sursa(job #1059285)

Utilizator sorin2kSorin Nutu sorin2k Data 16 decembrie 2013 15:37:47
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int tree[2 << 15], n, m, i, val, poz, cod, sum, l, r;

void update(int rad, int left, int right) {
	if(left == right) {
		tree[rad] -= val;
	} else {
		int med = (left + right) / 2;
		if(poz <= med) {
			update(2*rad, left, med);
		} else {
			update(2*rad+1, med+1, right);
		}
		tree[rad] = tree[2*rad] + tree[2*rad+1];
	}
}

void query(int rad, int left, int right) {
	if(l <= left && right <= r) {
		sum += tree[rad];
	} else {
		int med = (left + right) / 2;
		if(l <= med) {
			query(2*rad, left, med);
		}
		if(r > med) {
			query(2*rad+1, med+1, right);
		}
	}
}

int main() {
	fin >> n >> m;
	for(i = 1; i <= n; i++) {
		fin >> val;
		val = 0 - val;
		poz = i;
		update(1, 1, n);
	}
	for(i = 1; i <= m; i++) {
		fin >> cod;
		if(cod == 0) {
			fin >> poz >> val;
			update(1, 1, n);
		} else {
			fin >> l >> r;
			sum = 0;
			query(1, 1, n);
			fout << sum << '\n';
		}
	}
	return 0;
}