Cod sursa(job #3258520)

Utilizator TonyyAntonie Danoiu Tonyy Data 22 noiembrie 2024 23:31:34
Problema Curcubeu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin ("curcubeu.in");
ofstream fout("curcubeu.out");

int n;
const int Max = 1e6 + 6;
vector<int> a(Max), b(Max), c(Max), parent(Max, -1), color(Max);

int find_set(int x)
{
    if(parent[x] == -1)
        return x;
    return parent[x] = find_set(parent[x]);
}

int main()
{
    fin >> n >> a[1] >> b[1] >> c[1];
    if(a[1] > b[1])
        swap(a[1], b[1]);
    for(int i = 2; i < n; ++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;
        if(a[i] > b[i])
            swap(a[i], b[i]);
    }
    for(int i = n - 1; i >= 1; --i)
    {
        int j = find_set(a[i]);
        while(j <= b[i])
        {
            color[j] = c[i];
            parent[j] = b[i] + 1;
            j = find_set(++j);
        }
    }
    for(int i = 1; i < n; ++i)
        fout << color[i] << "\n";

    fin.close();
    fout.close();
    return 0;
}