Cod sursa(job #3365538)

Utilizator Andrada_MincaAndrada Minca Andrada_Minca Data 22 septembrie 2026 10:35:12
Problema Curcubeu Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("curcubeu.in");
ofstream cout("curcubeu.out");
vector<int> nexts(1000005,0);
int poola(int a) {
    int cp=a;
    while (nexts[a]!=a) {
        a=nexts[a];
    }
    while (nexts[cp]!=cp) {
        int x=nexts[cp];
        nexts[cp]=a;
        cp=x;
    }
    return a;
}
int main() {
    int n,a,b,c;
    cin>>n>>a>>b>>c;
    vector<int>l(n+1);
    vector<int>r(n+1);
    vector<int>x(n+1);

   for (int i=1;i<n;i++) {
       a=(a*i)%n;
       b=(b*i)%n;
       c=(c*i)%n;
       l[i]=a;
        r[i]=b;
        x[i]=c;
    }
    nexts.resize(n+1);
    for (int j=1;j<=n;j++) {
        nexts[j]=j;
    }
    //nexts[0]=1;
    vector<int>ans(n+1);
    for (int i=n-1;i>0;i--)
    {
        a=min(l[i],r[i]);
        b=max(l[i],r[i]);
        c=x[i];
        if (a==0&&b==0)continue;
        for (int j=poola(a);j<=b;) {
            //cout<<j<<" ";
            ans[j]=c;
            nexts[j]=poola(j+1);
            j=poola(j);
        }
    }
    for (int i=1;i<n;i++) {
        cout<<ans[i]<<'\n';
    }
    return 0;
}