Cod sursa(job #599913)

Utilizator ChallengeMurtaza Alexandru Challenge Data 29 iunie 2011 23:09:41
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>

using namespace std;

const char InFile[]="datorii.in";
const char OutFile[]="datorii.out";
const int MaxN=1<<15;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,M,op,x,y,aib[MaxN];

inline int lsb(const int &x)
{
	return x&-x;
}

inline void update(int pos, const int &val)
{
	for(;pos<=N;pos+=lsb(pos))
	{
		aib[pos]+=val;
	}
}

inline int query(int pos)
{
	int sol=0;
	for(;pos;pos-=lsb(pos))
	{
		sol+=aib[pos];
	}
	return sol;
}

inline int query(int a, int b)
{
	return query(b)-query(a-1);
}

int main()
{
	fin>>N>>M;
	for(register int i=1;i<=N;++i)
	{
		fin>>x;
		update(i,x);
	}
	for(register int i=1;i<=M;++i)
	{
		fin>>op>>x>>y;
		if(op==0)
		{
			update(x,-y);
		}
		else
		{
			fout<<query(x,y)<<"\n";
		}
	}
	fin.close();
	fout.close();
	return 0;
}