Pagini recente » Cod sursa (job #1949125) | Cod sursa (job #1422240) | Cod sursa (job #53501) | Cod sursa (job #1813698) | Cod sursa (job #1205317)
#include <cstdio>
#define Nmax 1000005
using namespace std;
int cul[Nmax],A[Nmax],B[Nmax],C[Nmax],nxt[Nmax];
inline int Find(int p)
{
int i=p,rad,aux;
while(cul[p])
p=nxt[p];
rad=p;
while(cul[i])
{
aux=nxt[i];
nxt[i]=rad;
i=aux;
}
return rad;
}
int main()
{
int N,i,j,aux;
freopen ("curcubeu.in","r",stdin);
freopen ("curcubeu.out","w",stdout);
scanf("%d%d%d%d", &N,&A[1],&B[1],&C[1]);
--N;
for(i=2;i<=N;++i)
{
A[i] = (1LL*A[i-1] * i) % (N+1);
B[i] = (1LL*B[i-1] * i) % (N+1);
C[i] = (1LL*C[i-1] * i) % (N+1);
}
for(j=N;j;--j)
{
if(B[j]<A[j])
{
aux=A[j]; A[j]=B[j]; B[j]=aux;
}
for(i=A[j];i<=B[j];)
if(!cul[i])
{
cul[i]=C[j];
nxt[i++]=Find(B[j]+1);
}
else
i=Find(i);
}
for(i=1;i<=N;++i)
printf("%d\n", cul[i]);
return 0;
}