Cod sursa(job #432034)

Utilizator vladbBogolin Vlad vladb Data 1 aprilie 2010 19:07:36
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<fstream>

#define maxn 15001

using namespace std;

ifstream fin("datorii.in");
ofstream fout("datorii.out");

int n,m;
int c[maxn];

void introducere(int ind,int val)
{	int poz=0;
	while(ind<=n)
	{	c[ind]+=val;
		while(!(ind &(1<<poz)))
			poz++;
		ind+=(1<<poz);
		poz++;
	}
}

void modifica(int ind,int val)
{	int poz=0;
	while(ind<=n)
	{	c[ind]-=val;
		while(!(ind &(1<<poz)))
			poz++;
		ind+=(1<<poz);
		poz++;
	}
}

int suma(int ind)
{	int s=0,poz=0;
	while(ind>0)
	{	s+=c[ind];
		while(!(ind&(1<<poz)))
			poz++;
		ind-=(1<<poz);
		poz++;
	}
	return s;
}

int main()
{	int i,x,y,k;
	fin>>n>>m;
	for(i=1;i<=n;i++)
	{	fin>>x;
		introducere(i,x);
	}
	for(i=1;i<=m;i++)
	{	fin>>k>>x>>y;
		if(k==0) modifica(x,y);
		else fout<<suma(y)-suma(x-1)<<"\n";
	}
	fin.close();
	fout.close();
	return 0;
}