Cod sursa(job #919122)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 19 martie 2013 13:25:05
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<fstream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,A[1000100],B[1000100],C[1000100],next[1000100],v[1000100];

int main()
{
	int i,poz,start,finish,color;
	freopen("curcubeu.in","r",stdin);
	scanf("%d %d %d %d",&n,A+1,B+1,C+1);
	
	next[1]=1;
	for(i=2;i<n;i++)
	{
		A[i]=(1LL*A[i-1]*i)%n;
		B[i]=(1LL*B[i-1]*i)%n;
		C[i]=(1LL*C[i-1]*i)%n;
		next[i]=i;
	}
	for(i=n-1;i>0;i--)
	{
		start=A[i];
		finish=B[i];
		if(start>finish)
			swap(start,finish);
		color=C[i];
		poz=start;
		while(poz<=finish)
		{
			while(next[poz]!=poz && poz<=finish)
				poz=next[poz];
			if(poz>finish)
				continue;
			v[poz]=color;
			next[poz]=finish+1;
			poz++;
		}
	}
	
	freopen("curcubeu.out","w",stdout);
	for(i=1;i<n;i++)
		printf("%d\n",v[i]);
	return 0;
}