Pagini recente » Cod sursa (job #1980896) | Cod sursa (job #2940121) | Cod sursa (job #2137792) | Cod sursa (job #524392) | Cod sursa (job #624139)
Cod sursa(job #624139)
#include <iostream>
#include <cstdio>
#define NMax 1000010
#define LL long long
using namespace std;
LL N, A[NMax], B[NMax], C[NMax];
LL Rainbow[NMax], Right[NMax];
void Read ()
{
freopen ("curcubeu.in", "r", stdin);
scanf ("%lld %lld %lld %lld", &N, &A[1], &B[1], &C[1]);
Rainbow[1]=-1;
if (A[1]>B[1])
{
int Aux=A[1];
A[1]=B[1];
B[1]=Aux;
}
for (int i=2; i<N; ++i)
{
Rainbow[i]=-1;
A[i]=(i*A[i-1])%N;
B[i]=(i*B[i-1])%N;
if (A[i]>B[i])
{
int Aux=A[i];
A[i]=B[i];
B[i]=Aux;
}
C[i]=(i*C[i-1])%N;
}
}
void Print ()
{
freopen ("curcubeu.out", "w", stdout);
for (LL i=1; i<N; ++i)
{
printf ("%lld\n", Rainbow[i]);
}
}
void Colour (LL X, LL Y, LL CurrentC)
{
for (LL i=X; i<=Y; )
{
if (Rainbow[i]==-1)
{
Rainbow[i]=CurrentC;
Right[CurrentC]=i;
++i;
}
else
{
i=Right[Rainbow[i]]+1;
}
}
}
int main()
{
Read ();
for (int i=N-1; i>=0; --i)
{
Colour (A[i], B[i], C[i]);
}
Print ();
return 0;
}