Cod sursa(job #711805)

Utilizator Anonymous1010Chilivercu Cristian Anonymous1010 Data 12 martie 2012 19:56:34
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>

int n,m,i,j,x,y,pos,s1,s2,a[15002],c;

int main()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	
	scanf("%d %d",&n,&m);
	
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x);
		if(x)
		{
			pos=0;
		
			for(j=i;j<=n;)
			{
				a[j]+=x;
				for(;!(j&1<<pos);)
					pos++;
				
				j+=1<<pos;
				pos++;
			}
		}
	}
	
	for(;m;m--)
	{
		scanf("%d %d %d",&c,&x,&y);
		
		if(c==0)
		{
			pos=0;
			
			for(j=x;j<=n;)
			{
				a[j]-=y;
				for(;!(j&1<<pos);)
					pos++;
				j+=1<<pos;
				pos++;
			}
		}
		else
		{
			s1=0;
			s2=0;
			x--;
			
			for(;x>0;)
			{
				s1+=a[x];
				
				for(i=0;!(x&1<<i);i++);
					
				if(i)
					x-=(1<<i);
				else
					x--;
			}
			
			for(;y>0;)
			{
				s2+=a[y];
				
				for(i=0;!(y&1<<i);i++);
					
				if(i)
					y-=(1<<i);
				else
					y--;
			}
			
			printf("%d\n",s2-s1);
		}
	}
	
	return 0;
}