Cod sursa(job #1210193)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 19 iulie 2014 14:01:31
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<algorithm>
#define MAXN 1000005
#define LL long long
using namespace std;
LL N,A[MAXN],B[MAXN],C[MAXN],D[MAXN],next[MAXN];
int main() {
	freopen("curcubeu.in","r",stdin);
freopen("curcubeu.out","w",stdout);
	  LL i,j,R,x;
	  scanf("%lld %lld %lld %lld",&N,&A[1],&B[1],&C[1]);
	  next[1]=1;
	  for(i=2;i<=N-1;i++)
	     { A[i]=(A[i-1]*i)%N;
	       B[i]=(B[i-1]*i)%N;
	       C[i]=(C[i-1]*i)%N;
		   next[i]=i;        }
	 for(i=N-1;i>=1;i--) {
	 				j=min(A[i],B[i]);
					 while(j<=max(A[i],B[i])) {	 
	 		    //gasim prima casuta necolorata  R
				 for(R=j;next[R]!=next[R] && R<=max(A[i],B[i]);R=next[R])
				 //compresia drumurilor
				  for(;next[j]!=j;) {
				     	x=next[j];
						next[j]=R;
						j=x; 		  
	 					 }
					while(D[j]==0 && j<=max(A[i],B[i])) {
								 D[j]=C[i];
								 j++;
								 }
				 }//end while
}//end for			 			 								    	  	 					 
	  for(i=1;i<=N-1;i++)
	       printf("%lld\n",D[i]);
	return 0;
}