Pagini recente » Cod sursa (job #3361816) | Cod sursa (job #3361546) | Cod sursa (job #3361547) | Cod sursa (job #3362096) | Cod sursa (job #3362034)
#include <iostream>
#pragma GCC optimize("O3,unroll-loops")
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <climits>
#include <iomanip>
#include <numeric>
#include <cstdio>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
//#define int long long
//#define int short
using namespace std;
const int nmax = 1e6;
int n, a, b, c, parent[nmax + 5], rez[nmax + 5];
void build(){
for (int i = 1; i <= n; i++){
parent[i] = i;
}
}
int findset(int i){
if (i == parent[i]){
return i;
}
return parent[i] = findset(parent[i]);
}
void unionsets(int i, int j){
parent[i] = findset(j);
}
struct query{
int l;
int r;
int col;
}q[nmax + 5];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
freopen("curcubeu.in", "r", stdin);
freopen("curcubeu.out", "w", stdout);
cin>>n>>a>>b>>c;
q[1] = {min(a, b), max(a, b), c};
for (int i = 2; i < n; i++){
a = (1ll * a * i) % n;
b = (1ll * b * i) % n;
c = (1ll * c * i) % n;
q[i] = {min(a, b), max(a, b), c};
}
build();
for (int i = n - 1; i >= 1; i--){
int curr = findset(q[i].l);
while (curr <= q[i].r){
rez[curr] = q[i].col;
unionsets(curr, curr + 1);
curr = findset(curr);
}
}
for (int i = 1; i <= n - 1; i++){
cout<<rez[i]<<"\n";
}
}