Cod sursa(job #584695)

Utilizator lily3Moldovan Liliana lily3 Data 26 aprilie 2011 13:20:31
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>
using namespace std;

int i,j,n,m,q,p,x,c[15001],nr0,s1,s2;
int main()
{
	ifstream f("datorii.in");
	ofstream g("datorii.out");
	f>>n>>m;
	c[0]=0;
	for(i=1;i<=n;i++)
		f>>c[i],c[i]+=c[i-1];
	for(i=1;i<=n;i++)
	{
		nr0=0;
		while((i&1<<nr0)==0)
			nr0++;
		c[i]-=c[i-(1<<nr0)];
	}
	while(m--)
	{
		f>>x>>q>>p;
		if(x==1)
		{
			s1=s2=0;
			nr0=0;
			while(p>0)
			{
				s1+=c[p];
			while((p&1<<nr0)==0)
				nr0++;
			p-=1<<nr0;
			nr0++;
			}
			nr0=0;
			q-=1;
			while(q>0)
			{
				s2+=c[q];
				while((q&1<<nr0)==0)
					nr0++;
				q-=1<<nr0;
				nr0++;
			}
			g<<s1-s2<<"\n";
		}
		else
			if(x==0)
			{
				nr0=0;
				while(q<=n)
				{
					c[q]-=p;
					while((q&1<<nr0)==0)
						nr0++;
					q+=1<<nr0;
					nr0++;
				}
			}
	}
	return 0;
}