Pagini recente » Cod sursa (job #11873) | Cod sursa (job #2501853) | Cod sursa (job #85624) | Cod sursa (job #741436) | Cod sursa (job #3246516)
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cassert>
using namespace std;
typedef long long ll;
vector<int>parent, nr, sol;
int n, m, mx = 0;
vector<pair<int, int>>v, q;
int get_root(int nod) {
if (parent[nod] == nod)
return nod;
return parent[nod]=get_root(parent[nod]);
}
void merge(int x, int y) {
x = get_root(x);
y = get_root(y);
if(x!=y)
{
parent[y] = x;
nr[x] += nr[y];
}
mx = max(mx, nr[x]);
mx = max(mx, nr[y]);
}
void make_root(int nod) {
assert(0 <= nod && nod <n);
parent[nod] = nod;
nr[nod] = 1;
mx = max(mx, 1);
if (nod-1>=0&&parent[nod - 1] != -1)
merge(nod, nod - 1);
if (nod+1<n&&parent[nod + 1] != -1)
merge(nod, nod + 1);
}
int get_nr(int nod) {
return nr[get_root(nod)];
}
struct interval {
int a, b, c;
};
signed main()
{
#ifdef INFOARENA
freopen("curcubeu.in", "r", stdin);
freopen("curcubeu.out", "w", stdout);
#endif
int n, a, b, c;
cin >> n >> a >> b >> c;
sol.resize(n + 1, -1);
vector<interval>pas;
for (int i = 1; i <= n - 1; i++) {
a = (a * i) % n;
b = (b * i) % n;
c = (c * i) % n;
interval it;
it.a = a;
it.b = b;
it.c = c;
pas.push_back(it);
}
for (int i = pas.size()-1; i>=0; i--) {
for (int j = min(pas[i].a, pas[i].b); j <= max(pas[i].a, pas[i].b); j++)
if (sol[j] == -1)
sol[j] = pas[i].c;
}
for (int i = 1; i <= n - 1; i++) {
cout << sol[i] << "\n";
}
}