Cod sursa(job #2839757)

Utilizator LionMan101Achim-Panescu Silvian LionMan101 Data 26 ianuarie 2022 15:27:31
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <tuple>
#include <iostream>

using namespace std;

tuple<int,int,int> v[1000001];
int ans[1000001], colored[1000001];

int available(int j){
    int next=colored[j];
    while(next!=colored[next]){
        next=colored[next];
    }
    int aux=next;
    next=colored[j];
    while(next!=colored[next]){
        int a=next;
        next=colored[next];
        colored[a]=max(b,aux);
    }
    return aux;
}

void solve()
{
    int n,a,b,c;
    cin>>n>>a>>b>>c;
    v[1]=tie(a,b,c);
    colored[1]=1;
    for(int i=2; i<n; i++){
        a=((long long)a*i)%n;
        b=((long long)b*i)%n;
        c=((long long)c*i)%n;
        v[i]=tie(min(a,b),max(a,b),c);
        colored[i]=i;
    }
    colored[n]=n;
    for(int i=n-1; i>0; i--){
        int a,b,c;
        tie(a,b,c)=v[i];
        for(int j=available(a); j<=b;){
            ans[j]=c;
            int next=available(j+1);
            colored[j]=next;
            j=next;
        }
    }
    for(int i=1; i<n; i++){
        cout<<ans[i]<<"\n";
    }
}

int main()
{
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);

    freopen("curcubeu.in", "r", stdin);
    freopen("curcubeu.out", "w", stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    solve();
    return 0;
}