Cod sursa(job #1059284)

Utilizator sorin2kSorin Nutu sorin2k Data 16 decembrie 2013 15:36:52
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 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;
		return;
	}
	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];
		return;
	}
	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;
}