Cod sursa(job #2839732)

Utilizator LionMan101Achim-Panescu Silvian LionMan101 Data 26 ianuarie 2022 14:51:24
Problema Curcubeu Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <vector>
#include <tuple>

using namespace std;

vector<tuple<long long,long long,long long>> v(1'000'001);
long long ans[1'000'001], colored[1'000'001];

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

void solve()
{
    long long 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=(a*i)%n;
        b=(b*i)%n;
        c=(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--){
        tie(a,b,c)=v[i];
        for(int j=a; j<=b; j++){
            j=available(j);
            if(j<=b && !ans[j]){
                ans[j]=c;
                colored[j]=available(j+1);
            }
            colored[j]=max(colored[j],b);
        }
    }
    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;
}