Cod sursa(job #349610)

Utilizator proflaurianPanaete Adrian proflaurian Data 20 septembrie 2009 15:36:45
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<stdio.h>
int n,m,i,j,k,U[16000],D[16000],s[16000],ss,si;
void read(),solve();
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("datorii.in","r",stdin);
	freopen("datorii.out","w",stdout);
	scanf("%d%d",&n,&m);
}
void solve()
{
	for(i=1;i<=n;i<<=1)
	{
		j=i<<1;
		for(k=i;k<=n;k=k+j)
		{
			U[k]=k+i<=n?k+i:0;
			D[k]=k-i;
		}
	}
	for(i=1;i<=n;i++)
	{
		scanf("%d",&si);
		for(j=i;j;j=U[j])s[j]+=si;
	}
	for(;m;m--)
	{
		scanf("%d%d%d",&i,&j,&k);
		if(i)
		{
			si=ss=0;j--;
			for(;j;j=D[j])si+=s[j];
			for(;k;k=D[k])ss+=s[k];
			printf("%d\n",ss-si);
			continue;
		}
		for(;j;j=U[j])
			s[j]-=k;
	}
}