Cod sursa(job #461201)

Utilizator darrenRares Buhai darren Data 5 iunie 2010 21:45:06
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>
using namespace std;

int n, m, a, b, p, v, sum;
int ari[15001 * 4 + 11];

void update(int nod, int st, int dr)
{
	ari[nod] += v;
	if (st == dr)
		return;
	int md = (st + dr) >> 1;
	if (p <= md)
		update(nod * 2, st, md);
	else
		update(nod * 2 + 1, md + 1, dr);
}

void query(int nod, int st, int dr)
{
	if (a <= st && dr <= b)
	{
		sum += ari[nod];
		return;
	}
	int md = (st + dr) >> 1;
	if (a <= md)
		query(2 * nod, st, md);
	if (b > md)
		query(2 * nod + 1, md + 1, dr);
}

int main()
{
	ifstream fin("datorii.in");
	ofstream fout("datorii.out");
	fin >> n >> m;
	
	int aux;
	for (int i = 1; i <= n; ++i)
	{
		fin >> aux;
		p = i, v = aux;
		update(1, 1, 1000);
	}
	int val, p1, p2;
	for (int i = 1; i <= m; ++i)
	{
		fin >> aux;
		switch (aux)
		{
		case 0:
			fin >> p1 >> val;
			p = p1, v = -val;
			update(1, 1, 1000);
			break;
		case 1:
			fin >> p1 >> p2;
			a = p1, b = p2;
			query(1, 1, 1000);
			fout << sum << '\n';
			sum = 0;
			break;
		}
	}
}