Pagini recente » Cod sursa (job #1006059) | Cod sursa (job #1194588) | Cod sursa (job #952215) | Cod sursa (job #1911351) | Cod sursa (job #86133)
Cod sursa(job #86133)
#include <cstdio>
const int Nmax = 1000005;
int n, m;
int a[Nmax], b[Nmax], c[Nmax];
int Next[Nmax];
int v[Nmax];
inline void swap(int &a, int &b) { a ^= b ^= a ^= b; }
void ReadData() {
freopen("curcubeu.in", "r", stdin);
freopen("curcubeu.out", "w", stdout);
scanf("%d %d %d %d", &n, &a[1], &b[1], &c[1]);
for (int i = 2; i < n; ++i) {
long long aux;
aux = a[i-1];
aux *= static_cast<long long>(i);
aux %= static_cast<long long>(n);
a[i] = aux;
aux = b[i-1];
aux *= static_cast<long long>(i);
aux %= static_cast<long long>(n);
b[i] = aux;
aux = c[i-1];
aux *= static_cast<long long>(i);
aux %= static_cast<long long>(n);
c[i] = aux;
}
for (int i = 1; i < n; ++i)
if (a[i] > b[i]) swap(a[i], b[i]);
}
int FindNext(int p) {
if (Next[p] == p) return p;
Next[p] = FindNext(Next[p]);
return Next[p];
}
void Solve() {
for (int i = 1; i <= n+1; ++i)
Next[i] = i;
for (int i = n-1; i; --i)
for (int j = FindNext(a[i]); j <= b[i]; j = Next[j]) {
v[j] = c[i];
Next[j] = FindNext(j+1);
}
}
void WriteData() {
for (int i = 1; i < n; ++i)
printf("%d\n", v[i]);
}
int main() {
ReadData();
Solve();
WriteData();
}