Cod sursa(job #2672819)

Utilizator juststealmyheartMihai Panduru juststealmyheart Data 14 noiembrie 2020 22:47:19
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
/// REZOLVARE PRIN ARBORI INDEXATI BINAR

#include <fstream>
using namespace std;
	
#define p(x)	(x & (-x))
const int nMax = 15000;
int n, q, vec[nMax + 5], aib[nMax + 5];
	
int query(int x)
{
	int sum = 0;

	for (int i = x; i >= 1; i -= p(i))
		sum += aib[i];

	return sum;
}
	
int main()
{
	ifstream fin("datorii.in");
	ofstream fout("datorii.out");

	fin >> n >> q;

	for (int i = 1; i <= n; ++i)
		fin >> vec[i];
	
	for (int i = 1; i <= n; ++i)
		for (int j = i; j <= n; j += p(j))
			aib[j] += vec[i];
	
	for (int i = 1; i <= q; ++i)
	{
		int num, a, b;
		fin >> num >> a >> b;
	
		if (num == 0)
			for (int j = a; j <= n; j += p(j))
				aib[j] -= b;
		else if (num == 1)
			fout << query(b) - query(a - 1) << '\n';
	}
}