Cod sursa(job #493858)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 19 octombrie 2010 18:55:36
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#define Nmax 1000000+2
#define LL long long

int A[Nmax],B[Nmax],C[Nmax],Urm[Nmax],Cul[Nmax];
int N;

int main(){
	int i,j,jj,aux,lcul;
	freopen("curcubeu.in","r",stdin);
	freopen("curcubeu.out","w",stdout);
	scanf("%d%d%d%d",&N,&A[1],&B[1],&C[1]);
	Urm[1]=1;
	for(i=2;i<N;++i){
	//	scanf("%d%d%d",&A[i],&B[i],&C[i]);
		A[i]=((LL)A[i-1]*i)%N;
		B[i]=((LL)B[i-1]*i)%N;
		if( A[i] > B[i] ) aux=A[i],A[i]=B[i],B[i]=aux;
		C[i]=((LL)C[i-1]*i)%N;
		Urm[i]=i;
	}
	
	for(i=N-1;i>=1;--i){
		lcul=B[i]+1;
		while( Urm[lcul]>lcul ) lcul=Urm[lcul];
		
		for(j=A[i]; j<=B[i]; ++j ){
			while( Urm[j]>j )j=Urm[j];
			if( j>B[i] ) break;
			
			Cul[j]=C[i];
			Urm[j]=lcul;
		}
	}
	
	for(i=1;i<N;++i) printf("%d\n",Cul[i]);
	fclose(stdin); fclose(stdout);
	return 0;
}