Pagini recente » Cod sursa (job #3360434) | Cod sursa (job #3360437) | Cod sursa (job #3360409) | Cod sursa (job #3360403) | Cod sursa (job #3360428)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
struct Padure {
vector<int> padure;
Padure(int n) {
padure.resize(n + 2);
for(int i = 1; i <= n + 1; i++){
padure[i] = i;
}
}
int rad(int i) {
if (padure[i] == i) {
return i;
}
padure[i] = rad(padure[i]);
return padure[i];
}
};
struct op {
int a, b, c;
};
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
int main() {
int n;
fin >> n;
vector<op> v(n);
fin >> v[1].a >> v[1].b >> v[1].c;
for(int i = 2; i < n; i++){
v[i].a = (1LL * v[i - 1].a * i) % n;
v[i].b = (1LL * v[i - 1].b * i) % n;
v[i].c = (1LL * v[i - 1].c * i) % n;
}
Padure padure(n);
vector<int> ans(n + 1, 0);
for(int i = n - 1; i >= 1; i--){
int st = min(v[i].a, v[i].b);
int dr = max(v[i].a, v[i].b);
int p = padure.rad(st);
while(p <= dr){
ans[p] = v[i].c;
padure.padure[p] = p + 1;
p = padure.rad(p);
}
}
for(int i = 1; i < n; i++){
fout << ans[i] << '\n';
}
return 0;
}