Cod sursa(job #1980389)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 12 mai 2017 23:47:07
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<bits/stdc++.h>
#define maxN 1000005
using namespace std;
int nxt[maxN],v[maxN],n,a,b,c;
typedef struct tip
{
  int a,b,c;
};
tip tr[maxN];
inline int F(int x)
{
    while(nxt[x])
    {
        x=nxt[x];
    }
    return x;
}
inline void unite(int a,int b,int c)
{
    if(a>b) swap(a,b);
    while(a<=b)
    {
        if(v[a])
        {
            a=F(a);
        }
        if(a<=b)
        {
            v[a]=c;
            nxt[a]=b+1;
        }
        a++;
    }
}
int main()
{
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    scanf("%d%d%d%d",&n,&a,&b,&c);
    tr[1]={a,b,c};
    for(int i=2;i<n;i++)
    tr[i]={(tr[i-1].a*i)%n,(tr[i-1].b*i)%n,(tr[i-1].c*i)%n};
    for(int i=n-1;i>=1;i--)
        unite(tr[i].a,tr[i].b,tr[i].c);
    for(int i=1;i<n;i++)
        printf("%d\n",v[i]);
    return 0;
}