Cod sursa(job #1424916)

Utilizator theprdvtheprdv theprdv Data 25 aprilie 2015 20:52:57
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <cassert>
#include <algorithm>

using namespace std;

#define MAXN 15001
int T[4 * MAXN + 10], N, M, Val, Pos, sum, a, b;
string file = "datorii";

fstream fin(file + ".in", ios::in);
fstream fout(file + ".out", ios::out);

void update(int node, int left, int right)
{
	if (left == right){
		T[node] += Val;
		return;
	}
	int mid = (left + right) / 2;
	if (Pos <= mid) update(node * 2, left, mid);
	else update(node * 2 + 1, mid + 1, right);
	T[node] = T[node * 2] + T[node * 2 + 1];
}
void query(int node, int left, int right)
{
	if (a <= left && b >= right){
		sum += T[node];
		return;
	}
	int mid = (left + right) / 2;
	if (a <= mid) query(node * 2, left, mid);
	if (b >= mid + 1) query(node * 2 + 1, mid + 1, right);
}
int main()
{
	fin >> N >> M;
	for (int i = 1; i <= N; i++)
		fin >> Val, Pos = i,
		update(1, 1, N);
	
	for (int i = 1, x; i <= M; i++, sum = 0){
		fin >> x >> a >> b;
		if (!x)  Val = -b, Pos = a,
			update(1, 1, N);
		else query(1, 1, N),
			fout << sum << "\n";
	}

	fout.close();
	fin.close();
	return 0;
}