Pagini recente » Cod sursa (job #1996561) | Cod sursa (job #183394) | Cod sursa (job #1820696) | Cod sursa (job #3327475) | Cod sursa (job #3315103)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("curcubeu.in");
ofstream cout("curcubeu.out");
vector<int> a, b, c;
int n, a1, b1, c1;
vector<int> parent;
vector<int> rez;
int a_n(int i) {
if (i == 1) return a1;
a[i] = (a_n(i - 1) * i) % n;
return a[i];
}
int b_n(int i) {
if (i == 1) return b1;
b[i] = (b_n(i - 1) * i) % n;
return b[i];
}
int c_n(int i) {
if (i == 1) return c1;
c[i] = (c_n(i - 1) * i) % n;
return c[i];
}
int root(int pos) {
if (parent[pos] == pos) return pos;
parent[pos] = root(parent[pos]);
return parent[pos];
}
int main() {
a.resize(n + 2);
b.resize(n + 2);
c.resize(n + 2);
cin >> n >> a1 >> b1 >> c1;
a_n(n - 1);
b_n(n - 1);
c_n(n - 1);
a[1] = a1, b[1] = b1, c[1] = c1;
parent.resize(n + 2);
rez.resize(n + 2);
for (int i = 0 ; i <= n ; ++i) parent[i] = i;
for (int i = n - 1 ; i >= 1 ; --i) {
int left = min(a[i], b[i]), right = max(a[i], b[i]), color = c[i];
for (int j = root(left) ; j <= right ; j = root(j + 1)) {
rez[j] = color;
parent[j] = right + 1;
}
}
for (int i = 1 ; i <= n - 1 ; ++i) {
cout << rez[i] << "\n";
}
return 0;
}