Cod sursa(job #781288)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 24 august 2012 01:59:53
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb

#include <fstream>

const unsigned int MAX_SIZE(15001);

int bit [MAX_SIZE], n, m;

inline int lsb (int x)
{
	return x & -x;
}

inline int bit_sum (int x)
{
	int sum(0);
	while (x)
	{
		sum += bit[x];
		x -= lsb(x);
	}
	return sum;
}

void update (int x, int val)
{
	while (x <= n)
	{
		bit[x] += val;
		x += lsb(x);
	}
}


int main()
{
	std::ifstream input("datorii.in");
	int x, y;
	char q;
	input >> n >> m;
	for (int i(1) ; i <= n ; ++i)
	{
		input >> x;
		update(i,x);
	}
	std::ofstream output("datorii.out");
	while (m--)
	{
		input >> q >> x >> y;
		if (q == '0')
			update(x,-y);
		else
			output << bit_sum(y) - bit_sum(x - 1) << '\n';
	}
	input.close();
	output.close();
	return 0;
}