Cod sursa(job #1551159)

Utilizator krityxAdrian Buzea krityx Data 15 decembrie 2015 11:18:56
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <vector>
#define MAXN 15001
using namespace std;

int zeroes(int x)
{
	return (x ^ (x - 1)) & x;
}

void Update(vector<int> &BIT, int N, int index, int value)
{
	for (int i = index; i <= N; i += zeroes(i))
	{
		BIT[i] += value;
	}
}

int Query(vector<int> BIT, int N, int x)
{
	int sum = 0;
	for (int i = x; i > 0; i -= zeroes(i))
	{
		sum += BIT[i];
	}
	return sum;
}

int main()
{
	ifstream fin("datorii.in");
	ofstream fout("datorii.out");
	int N, M, i, a, b, c;
	fin >> N >> M;
	vector<int> bit(N + 1,0);
	for (i = 1; i <= N; i++)
	{
		fin >> a;
		Update(bit, N, i, a);
	}
	for (i = 1; i <= M; i++)
	{
		fin >> a >> b >> c;
		if (a == 1)
		{
			fout << Query(bit, N, c) - Query(bit, N, b - 1) << endl;
		}
		else
		{
			Update(bit, N, b, -c);
		}
	}
	fin.close();
	fout.close();

	return 0;
}