Pagini recente » Cod sursa (job #1249843) | Cod sursa (job #1750977) | Cod sursa (job #3041243) | Cod sursa (job #1271232) | Cod sursa (job #2178820)
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define N 1000100
#define ll long long
using namespace std;
ifstream in("curcubeu.in");
FILE *out = fopen("curcubeu.out", "w");
int n, a, b, c, L[N], R[N], C[N], sol[N], nxt[N], prv[N];
bool viz[N];
int forward(int p){
return (!viz[p] ? p : nxt[p] = forward(nxt[p]));
}
int backward(int p){
return (!viz[p] ? p : prv[p] = backward(prv[p]));
}
int main(){
in >> n >> a >> b >> c;
for(int i = 1; i <= n; i++){
if(i > 1){
a = ((ll)a * (ll)i) % n;
b = ((ll)b * (ll)i) % n;
c = ((ll)c * (ll)i) % n;
}
L[i] = max(1, min(a, b));
R[i] = max(a, b);
C[i] = c;
nxt[i] = i + 1;
}
for(int i = n - 1; i > 0; i--){
for(int p = L[i]; p <= R[i]; p = nxt[p]){
if(!viz[p]){
sol[p] = C[i];
viz[p] = 1;
}
}
int p = backward(forward(prv[L[i]]));
nxt[p] = forward(p);
prv[nxt[p]] = p;
}
for(int i = 1; i < n; i++)
fprintf(out, "%d\n", sol[i]);
return 0;
}