Pagini recente » Cod sursa (job #2157061) | Cod sursa (job #1669793) | Cod sursa (job #2514199) | Cod sursa (job #2354935) | Cod sursa (job #2261422)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("curcubeu.in");
ofstream out("curcubeu.out");
const int MAX_N = 1000000;
struct Update {
int left;
int right;
int col;
};
Update updates[1 + MAX_N];
int nextUncolored[1 + MAX_N];
int color[1 + MAX_N];
int main() {
int n, a, b, c;
in >> n >> a >> b >> c;
updates[1] = {min(a, b), max(a, b), c};
for (int i = 2; i <= n - 1; i++) {
a = (1LL * a * i) % n;
b = (1LL * b * i) % n;
c = (1LL * c * i) % n;
updates[i] = {min(a, b), max(a, b), c};
}
reverse(updates + 1, updates + n - 1 + 1);
for (int i = 0; i <= n; i++)
nextUncolored[i] = i;
for (int i = 1; i < n; i++) {
int pos = nextUncolored[updates[i].left];
while (pos < n && pos <= updates[i].right) {
color[pos] = updates[i].col;
pos = nextUncolored[pos + 1];
}
int pos1 = nextUncolored[updates[i].left];
while (pos1 < n && pos1 <= updates[i].right) {
nextUncolored[pos1] = pos;
pos1 = nextUncolored[pos1 + 1];
}
}
for (int i = 1; i <= n - 1; i++)
out << color[i] << "\n";
return 0;
}