Cod sursa(job #227964)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 5 decembrie 2008 23:12:24
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <math.h>

#define MAXN 1000001

long n, i, j, d, A[MAXN], B[MAXN], C[MAXN], v[MAXN], S[MAXN];

void gas() {
	for (i = 2; i < n; ++i)	{
		A[i] = (A[i - 1] * i) % n;
		B[i] = (B[i - 1] * i) % n;
		C[i] = (C[i - 1] * i) % n;
	}	
}

long min(long a, long b) { 
	if (a < b) {
		return a;
	}		
	return b;
}
long max(long a,long b) { 
	if (a < b) {
		return b;
	}
	return a;
}

int main() {
	freopen("curcubeu.in", "r", stdin);
	freopen("curcubeu.out", "w", stdout);
	scanf("%ld %ld %ld %ld", &n, &A[1], &B[1], &C[1]);
	gas();
	for (i = n - 1; i > 0; --i) {
		j = min(A[i], B[i]);
		d = max(A[i], B[i]);
		while (j <= d) {
			if (v[j] == 0) {
				S[j] = d + 1;
				v[++j] = C[i];
			} else {
				j = S[j];
            }
		}
	}
	for (i = 1; i < n; ++i) {
		printf("%ld\n", v[i]);
	}
	return 0;
}