Cod sursa(job #477500)

Utilizator Cosmin1490Balan Radu Cosmin Cosmin1490 Data 15 august 2010 01:24:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>

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

#define NMAX 15001
using namespace std;

int AIB[NMAX];
int N;

void add(int t, int v)
{
	for(int i=t;i<=N;i+=zeros(i))
	{
		AIB[i]+=v;
	}
}

int query(int x)
{
	int ret=0;
	for(int i=x;i>0;i-=zeros(i))
	{
		ret+=AIB[i];
	}
	return ret;
}


void citire()
{
	fstream fin("datorii.in",ios::in);
	fstream fout("datorii.out",ios::out);
	int M;
	int x,y,z;
	fin>>N>>M;
	for(register int i=1;i<=N;i++)
	{
		fin>>x;
		add(i,x);
	}
	for(register int i=1;i<=M;i++)
	{
		fin>>x;
		switch(x)
		{
		case(0):
			{
				fin>>y>>z;
				add(y,-z);
				break;
			}
		case(1):
			{
				fin>>y>>z;
				fout<<query(z)-query(y-1)<<"\n";
				break;
			}
		}
		
	}
	
	fout.close();
	fin.close();
}

int main(int argc,char *argv[])
{
	citire();
}