Cod sursa(job #2733315)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 30 martie 2021 11:16:34
Problema Curcubeu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");
const int N = 1000005;
int n;
typedef long long ll;
int a[N], b[N], c[N], p[N], ans[N];

int fnd(int x) {
if(p[x]==x)return x;

  return p[x]=fnd(p[x]);
}
void uni(int x, int y) {
  p[x] = y;
}
int main() {
  fin >> n >> a[1] >> b[1] >> c[1];
  for (int i = 2; i <= n - 1; i++) {
    a[i] = (1LL * a[i - 1] * i) % n;
    b[i] = (1LL * b[i - 1] * i) % n;
    c[i] = (1LL * c[i - 1] * i) % n;
  }
  for (int i = 1; i <= n + 1; i++) {
    p[i] = i;
    ans[i] = -1;
  }
  for (int i = n - 1; i >= 1; i--) {
    int start = min(a[i], b[i]);
    int en = max(a[i], b[i]);
    start = fnd(start);
    while(start <= en) {
      if (ans[start] == -1) {
        ans[start] = c[i];
        uni(start, en);
      }
      start++;
      start = fnd(start);
    }
  }
  for (int i = 1; i <= n - 1; i++) {
    ans[i] == -1 ? fout << "0\n" : fout << ans[i] << "\n";
  }
  return 0;
}