Cod sursa(job #461212)

Utilizator darrenRares Buhai darren Data 5 iunie 2010 22:05:39
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 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)
	{
		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];
	else
	{
		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, n);
	}
	for (int i = 1; i <= m; ++i)
	{
		fin >> aux;
		switch (aux)
		{
		case 0:
			fin >> p >> v;
			v = -v;
			update(1, 1, n);
			break;
		case 1:
			fin >> a >> b;
			sum = 0;
			query(1, 1, n);
			fout << sum << '\n';
			break;
		}
	}
}