Cod sursa(job #3238224)

Utilizator maryyMaria Ciutea maryy Data 23 iulie 2024 14:58:29
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("curcubeu.in");
ofstream out("curcubeu.out");
const int nmax=1e6;
int n, a[nmax+1], b[nmax+1], c[nmax+1], parent[nmax+1], r[nmax+1];
int FindRoot(int nod)
{
    if(parent[nod]==nod)
        return nod;
    return parent[nod]=FindRoot(parent[nod]);
}
int main()
{
    in>>n>>a[1]>>b[1]>>c[1];
    if(a[1]>b[1])
        switch(a[1], b[1]);
    parent[1]=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])
            switch(a[i], b[i]);
        parent[i]=i;
    }
    parent[n]=n;
    for(int i=n-1; i>=1; i--)
    {
        int p=FindRoot(a[i]);//unde coloreaza prima data, in dreapta punctului
        while(p<=b[i])
        {
            r[p]=c[i];
            parent[p]=b[i]+1;
            p=FindRoot(p+1);
        }
    }
    for(int i=1; i<=n-1; i++)
    {
        out<<r[i]<<'\n';
    }
}