Pagini recente » Cod sursa (job #3003247) | Cod sursa (job #351345) | Cod sursa (job #309464) | Finala preONI 2007, Bucuresti, Regulament | Cod sursa (job #2238981)
#include <cstdio>
using namespace std;
const int NMAX = 1000000;
struct col {
int a, b, c;
};
col O[NMAX];
int N,
next[NMAX], C[NMAX];
char V[NMAX];
int compress(int x) {
int r = x;
while(next[r]) r = next[r];
while(next[x]) {
int aux = next[x];
next[x] = r;
x = aux;
}
return r;
}
inline int min(int a, int b) {
return (a < b) ? a : b;
}
inline int max(int a, int b) {
return (a < b) ? b : a;
}
int main()
{
freopen("curcubeu.in", "r", stdin);
freopen("curcubeu.out", "w", stdout);
int a, b, c;
scanf("%i %i %i %i", &N, &a, &b, &c);
for(int i = 2; i <= N; i++) {
O[i-1].a = min(a, b);
O[i-1].b = max(a, b);
O[i-1].c = c;
a = (a*i)%N;
b = (b*i)%N;
c = (c*i)%N;
}
for(int i = N-1; i >= 1; i--) {
int x = compress(O[i].a);
while(x <= O[i].b)
if(V[x]) x = compress(x+1);
else {
V[x] = 1;
C[x] = O[i].c;
next[x] = O[i].b;
x = compress(x+1);
}
}
for(int i = 1; i < N; i++)
printf("%i\n", C[i]);
return 0;
}