Cod sursa(job #1238149)

Utilizator stef93Stefan Gilca stef93 Data 5 octombrie 2014 19:31:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <cstdlib>

using namespace std;

int AIB[15001] , n , m , op , ls , li , zi , suma;

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

void Sub(int poz , int sum , bool op)
{
	int i;

	for(i = poz ; i <= n ; i += zero(i))
	{
		if(op == false)
		AIB[i] -= sum;
		else
		AIB[i] += sum;
	}
}

int Sum(int poz)
{
	int s = 0 , i;

	for(i = poz ; i > 0 ; i -= zero(i))
	{
		s += AIB[i];
	}

	return s;
}

int main()
{
	ifstream in("datorii.in");
	ofstream out("datorii.out");


	int i;

	in >> n >> m;

	for(i = 1 ; i <= n ; i++)
	{
		in >> suma;
		Sub(i , suma , true);
	}

	for(i = 0 ; i < m ; i++)
	{
		in >> op;

		if(op == 0)
		{
			in >> zi >> suma;
			Sub( zi , suma , false);
		}
		else
		{
			in >> li >> ls;
			out << Sum(ls) - Sum(li - 1) << '\n';
		}
	}

	in.close();
	out.close();

	exit(EXIT_SUCCESS);
}