Cod sursa(job #1712394)

Utilizator TibiraducanuTiberiu Raducanu Tibiraducanu Data 2 iunie 2016 19:39:18
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <cstdio>
#include <algorithm>

using namespace std;

const int Nmax=1000005;

struct Gard
{
    int a,b,c;
} d[Nmax];

struct Poz
{
    int color,next;
} v[Nmax];

int main()
{
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);

    int n,a,b,c,i,urm;

    scanf("%d%d%d%d",&n,&d[1].a,&d[1].b,&d[1].c);

    for(i=2;i<n;i++)
    {
        d[i].a=( (long long) d[i-1].a * i ) % n;
        d[i].b=( (long long) d[i-1].b * i ) % n;
        d[i].c=( (long long) d[i-1].c * i ) % n;

        if( d[i].a > d[i].b) swap(d[i].a,d[i].b);
    }

    for(i=n-1;i>=1;i--)
    {
        a=d[i].a;
        b=d[i].b;
        c=d[i].c;

        while(a<=b)
        {
            if(v[a].color==0)
            {
                v[a].color=c;
                v[a].next=b;
                a++;
            }
            else
            {
                urm=v[a].next+1;
                if(v[a].next<b) v[a].next=b;
                a=urm;
            }
        }
    }

    for(i=1;i<=n-1;i++) printf("%d\n",v[i].color);

    return 0;
}