Cod sursa(job #2081501)

Utilizator RaduGiucleaGiuclea Radu RaduGiuclea Data 4 decembrie 2017 19:30:19
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int tata[1000001],cul[1000001],n;
struct aa{int a;int b;int c;};
int fnd(int a)
{
    if(a!=tata[a])
        a=fnd(tata[a]);
    return tata[a];
}
aa v[1000002];
void color(int k)
{
    int i,a,b,x;
    a=v[k].a,b=v[k].b;
    for(i=a;i<=b;i++)
    {
        if(cul[i]==0)
            cul[i]=k;
        if(cul[i]!=0)
        {
            x=cul[i];
            x=fnd(x);
            if(v[x].b>v[x].a)
                i=v[x].b;
            else i=v[x].a;
            tata[x]=k;
            v[k].b=max(v[k].b,v[x].b);
        }
    }
}
int main()
{
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    int a,b,c,i;
    scanf("%d%d%d%d",&n,&a,&b,&c);
    v[1].a=a;
    v[1].b=b;
    v[1].c=c;
    tata[1]=1;
    tata[n]=n;
    for(i=2;i<=n-1;i++)
    {
        tata[i]=i;
        v[i].a=min(v[i-1].a*i%n,v[i-1].b*i%n);
        v[i].b=max(v[i-1].a*i%n,v[i-1].b*i%n);
        v[i].c=v[i-1].c*i%n;
    }
    for(i=n-1;i>=1;i--)
        color(i);
    for(i=1;i<=n-1;i++)
        printf("%d\n",v[cul[i]].c);
    return 0;
}