Cod sursa(job #461204)

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

int n, m, a, b, p, v, sum;
int ari[40000];

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 << 1, st, md);
	else
		update((nod << 1) + 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(nod << 1, st, md);
	if (b > md)
		query((nod << 1) + 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, sum = 0;
			query(1, 1, 1000);
			fout << sum << '\n';
			break;
		}
	}
}