Cod sursa(job #1559668)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 31 decembrie 2015 13:57:05
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>

#define NMax 15010

using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

int nElem, queries, BIT[NMax];

void updateBIT(int pos, int val, int sign)
{
	while (pos <= nElem) {
		BIT[pos] += sign * val;
		pos = pos + (pos & (-pos));
	}
}

int getSum(int pos)
{
	int sum = 0;

	while (pos > 0) {
		sum += BIT[pos];
		pos = pos - (pos & (-pos));
	}

	return sum;
}

int main()
{
	f >> nElem >> queries;

	int elem;
	for (int i = 1; i <= nElem; i++) {
		f >> elem;
		updateBIT(i, elem, 1);
	}

	int cmd, num1, num2;
	for (int i = 1; i <= queries; i++) {
		f >> cmd >> num1 >> num2;

		if (cmd == 0)
			updateBIT(num1, num2, -1);
		else
			g << getSum(num2) - getSum(num1 - 1) << "\n";
	}

	return 0;
}