Cod sursa(job #658578)

Utilizator informatician28Andrei Dinu informatician28 Data 9 ianuarie 2012 02:17:47
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream> 
#include<algorithm> 
#define NMAX 1000001
using namespace std; 

ifstream in("curcubeu.in"); 
ofstream out("curcubeu.out"); 

int N, A[NMAX], B[NMAX], C[NMAX], color[NMAX], Next[NMAX]; 

void Rainbow(int A, int B, int CurrentC) 
{
	for(int j = A; j <= B; ) 
		if(color[j] == 0)
		{
			color[j] = CurrentC; 
			Next[CurrentC] = j; 
			j++;
		}
			else 
			j = Next[CurrentC] +1; 
}
			
int main() 
{
	int i;
	in >> N >> A[1] >> B[1] >> C[1]; 
	
	if(A[1] > B[1]) 
		swap(A[1], B[1]); 
	
	for(i = 2; i <= N-1; 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;
		
		if(A[i] > B[i]) 
			swap(A[i], B[i]); 
	}
	
	for(i = 1; i <= N-1; i++) 
		Rainbow(A[i], B[i], C[i]); 
	
	for(i = 1; i <= N-1; i++) 
		out << color[i] << '\n'; 
}