Pagini recente » Cod sursa (job #2033968) | Cod sursa (job #1409852) | Cod sursa (job #1120553) | Solutia problemei shoturi | Cod sursa (job #1346175)
#include <fstream>
using namespace std;
ifstream fin ("curcubeu.in");
ofstream fout ("curcubeu.out");
const int N = 4e6 + 5;
int n, a, b, c, Next[N], v[N];
pair <pair <int, int>, int> mc[N];
int find(int x) {
if (Next[x] != x)
Next[x] = find(Next[x]);
return Next[x];
}
void unite(int x, int y) {
Next[x] = find(y);
}
int main() {
fin >> n >> a >> b >> c;
for (int i = 1; i < n; ++i) {
Next[i] = i;
mc[i] = make_pair (make_pair(min(a, b), max(a, b)), c);
a = (1LL * a * (i + 1)) % n;
b = (1LL * b * (i + 1)) % n;
c = (1LL * c * (i + 1)) % n;
}
for (int i = n - 1; i; --i) {
for (int j = mc[i].first.first; j <= mc[i].first.second; ++j)
if (Next[j] != j) {
j = Next[j];
continue;
}
else
if (!v[j]) {
v[j] = mc[i].second;
unite(j, mc[i].first.second);
}
}
for (int i = 1; i < n; ++i)
fout << v[i] << "\n";
}