Cod sursa(job #571266)

Utilizator tinkyAndrei Ilisei tinky Data 4 aprilie 2011 11:07:07
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
#define zeros(x) ( (x ^ (x - 1)) & x )
using namespace std;
int aib[10000],v[100000];
int n,m;
//functia incrementeaza v[x] cu 'val' in arborele indexat binar
void add(int x,int val)
{
	int i;
	for (i=x;i<=n;i+=zeros(i))
		aib[i]+=val;
}
//calculeaza suma elementelor pe intervalul [1,x]
int suminterval(int x)
{
	int i,s=0;
	for (i=x;i>0;i-=zeros(i))
		s+=aib[i];
	return s;
}
int main()
{
	int i,op,k,j,s;
	ifstream in("datorii.in");
	in>>n>>m;
	for (i=1;i<=n;i++)
	{
		in>>v[i];
		add(i,v[i]);
	}
	ofstream out("datorii.out");
	for (i=1;i<=m;i++)
	{
		in>>op>>k>>j;
		if (op)
		{
			s=suminterval(j);
			s-=suminterval(k-1);
			out<<s<<'\n';
		}
		else
		{
			v[k]-=j;
			add(k,-j);			
		}
	}
}