Cod sursa(job #86984)

Utilizator marius135Dumitran Adrian Marius marius135 Data 25 septembrie 2007 23:12:04
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<stdio.h>
#define maxn 1024*1024

long val[maxn*2+4],v[maxn],n;

void add(long a,long b,long c,long poz,long l,long r)
{
	if( a>r || b <l) return ;
	if( a<=l && b>=r)
	{
		val[poz] = c;
		return ;
	}
	if( (l+r)/2 <a)
		val[poz*2] = val[poz];
	else add(a,b,c,poz*2,l,(l+r)/2);
	
	if( (l+r)/2+1 > b)
		val[poz*2+1] = val[poz];
	else add(a,b,c,poz*2+1,(l+r)/2+1,r);
	val[poz] = -1;
}

void col(long a,long b,long c)
{
	if(a>b)
		add(b,a,c,1,1,n-1);
	else add(a,b,c,1,1,n-1);
}
void coloreaza(long poz,long l,long r)
{
	if(val[poz]!=-1)
		{
		for(long i =l;i <= r; i++)
			v[i] = val[poz];
		return ;
		}
	if(l==r) {v[l] = 0;return ;}
	coloreaza(poz*2,l,(l+r)/2); 
	coloreaza(poz*2+1,(l+r)/2+1,r);
	
}
int main()
{
	freopen("curcubeu.in","r",stdin);
	freopen("curcubeu.out","w",stdout);
	long a,b,c,i;
	scanf("%ld %ld %ld %ld",&n,&a,&b,&c);
	for(i=1;i<=maxn*2+2;i++)
		val[i] = -1;
	for( long i = 1; i <= n-1; i++)
	{
		col(a,b,c);
		a = ((long long )a*(i+1))%n;
		b = ((long long )b*(i+1))%n;
		c = ((long long )c*(i+1))%n;
	}
	coloreaza(1,1,n-1);
	for(i=1;i<n;i++)
		printf("%ld\n",v[i]);
		
	return 0;
}