Pagini recente » Cod sursa (job #1339217) | Cod sursa (job #2539417) | Cod sursa (job #655002) | Cod sursa (job #2408157) | Cod sursa (job #90228)
Cod sursa(job #90228)
#include <cstdio>
#include <algorithm>
using namespace std;
#define fin "curcubeu.in"
#define fout "curcubeu.out"
#define Nmax 1000001
int N,a,b,c;
int col[Nmax],p[Nmax],nxt[Nmax];
int oper[Nmax][3];
int find(int x)
{
if ( x != p[x] )
p[x]=find(p[x]);
return x;
}
void readdata()
{
long long A,B,C;
int i,j;
freopen(fin,"r",stdin);
scanf("%d",&N);
scanf("%lld%lld%lld",&A,&B,&C);
for (i=1;i<N;++i)
{
A = ( A * i ) % N ;
B = ( B * i ) % N ;
C = ( C * i ) % N ;
a = ( int ) A;
b = ( int ) B;
c = ( int ) C;
if ( a > b )
swap(a,b);
oper[i][0]=a; oper[i][1]=b; oper[i][2]=c;
}
for (i=N-1;i>0;--i)
{
a=oper[i][0]; b=oper[i][1]; c=oper[i][2];
j=nxt[p[a]];
if (j == 0) j=a;
for (;j<=b;++j)
{
col[j]=c;
if ( col[j-1] != 0 )
{
p[j]=find(j-1);
nxt[p[j]]=j;
}
if ( col[j+1] != 0 )
{
p[p[j]]=find(j+1);
}
if ( p[j] == 0 )
{
p[j]=j;
nxt[j]=j;
}
j=nxt[p[j]];
}
}
}
void printdata()
{
int i;
freopen(fout,"w",stdout);
for (i=1;i<N;++i)
printf("%d\n",col[i]);
}
int main()
{
readdata();
printdata();
return 0;
}