Cod sursa(job #2480268)

Utilizator mircearoataMircea Roata Palade mircearoata Data 25 octombrie 2019 10:48:34
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define zeros(pos) ( (pos ^ (pos - 1)) & pos )

int n, q;
int aib[(1 << 15) + 1];

void add(int pos, int val)
{
	for (int i = pos; i <= n; i += zeros(i))
		aib[i] += val;
}

int calc(int pos)
{
	int ret = 0;
	for (int i = pos; i > 0; i -= zeros(i))
		ret += aib[i];
	return ret;
}

int main()
{
	in >> n >> q;
	for (int i = 1; i <= n; i++)
	{
		int x;
		in >> x;
		add(i, x);
	}
	while (q--)
	{
		int t, a, b;
		in >> t >> a >> b;
		if (t == 0)
			add(a, -b);
		else if (t == 1)
			out << calc(b) - calc(a - 1) << '\n';
	}
}