Cod sursa(job #235684)

Utilizator alexeiIacob Radu alexei Data 25 decembrie 2008 12:53:21
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#define NMAX 1000001

int A[NMAX],B[NMAX],C[NMAX],ANS[NMAX],NEXT[NMAX];

inline int min(const int a,const int b)
{
	return a<b?a:b;
}
inline int max(const int a,const int b)
{
	return a>b?a:b;
}

int main()
{
	freopen("curcubeu.in","r",stdin);
	freopen("curcubeu.out","w",stdout);

	int N;
	scanf("%d",&N);
	scanf("%d%d%d",&A[N-1],&B[N-1],&C[N-1]);
	
	int i,j=2;
	for(i=N-2; i; --i,++j)
	{
		A[i]=(A[i+1]*j)%N;
		B[i]=(B[i+1]*j)%N;
		C[i]=(C[i+1]*j)%N;
		//printf("%d %d %d\n",A[i],B[i],C[i]);
	}
	
	int begin,end;
	for(i=1; i<=N-1; ++i)
	{
		begin=min(A[i],B[i]);
		end=max(A[i],B[i]);
		
		for(; begin<=end; ++begin) 
		{
			if( !ANS[ begin ] )
			{
				ANS[begin]=C[i];
				NEXT[begin]=end;
			}
			else
				begin=NEXT[begin];
		}
	}

	for(i=1; i<N; ++i)
		printf("%d\n",ANS[i]);

	return 0;
}