Cod sursa(job #651714)

Utilizator paul.pantiruPantiru Paul paul.pantiru Data 21 decembrie 2011 10:21:57
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
#include<iostream>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
long AIB[100],v[100],N;
void Add(int x, int quantity)
{
	int i;
	for (i = x; i <= N; i += zeros(i))
	AIB[i] += quantity;
}
int Compute(int x)
{
	int i, ret = 0;
	for (i = x; i > 0; i -= zeros(i))
	ret += AIB[i];
	return ret;
}
int main()
{
	int M,i,x,y,op;
	ifstream intrare;
	intrare.open("datorii.in");
	ofstream iesire;
	iesire.open("datorii.out");
	intrare >> N >> M;
	for(i=0;i<=N;i++)
	{
		v[i]=0;
		AIB[i]=0;
	}
	for (i = 1; i<=N; i++)
	{
		intrare >> v[i];
		Add(i,v[i]);
	}
	for (i=0; i<M ;i ++)
	{
		intrare >> op >> x >> y;
		cout<<x<<" "<<y<<endl;
		if (op == 0)
			Add ( x, -y);
		if (op ==1)
			iesire << (Compute(y) - Compute (x-1))<<endl;
	}
	intrare.close();
	iesire.close();
	return 0;
}