Cod sursa(job #1172113)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 16 aprilie 2014 20:06:32
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<fstream>
using namespace std;

struct intervale
{
    int a,b,c;
};

ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");

int n;
intervale l[1000005];
int NEXT[1000005],v[1000005];

int main()
{
    int i,j,aux;
    fin>>n>>l[1].a>>l[1].b>>l[1].c;
    for (i=2;i<=n-1;i++)
        {
            l[i].a=(1LL*l[i-1].a*i)%n;
            l[i].b=(1LL*l[i-1].b*i)%n;
            l[i].c=(1LL*l[i-1].c*i)%n;
        }
    for (i=1;i<=n;i++)
        NEXT[i]=i;
    v[l[n-1].a]=l[n-1].c;
    NEXT[l[n-1].a]=l[n-1].b;
    for (i=l[n-1].a;i<=l[n-1].b;i++)
        {
            v[i]=l[n-1].c;
            NEXT[i]=l[n-1].a;
        }
    for (i=n-2;i>=1;i--)
        {
            v[l[i].a]=l[i].c;
            if (NEXT[l[i].a-1])
                NEXT[l[i].a]=NEXT[l[i].a-1];
            else NEXT[l[i].a]=l[i].b;
            for (j=l[i].a+1;j<=l[i].b;j++)
            {
                while (NEXT[j] && j<=l[i].b)
                    {
                        aux=j-1;
                        j=NEXT[j];
                        NEXT[j]=NEXT[j-1];
                    }
                if (j<=l[i].b)
                    {
                        v[j]=l[i].c;
                        NEXT[j]=NEXT[j-1];
                    }
            }
            if (j+1<=n-1 && j==l[i].b && NEXT[j+1])
                NEXT[j+1]=NEXT[j];
        }
    for (i=1;i<=n-1;i++)
        fout<<v[i]<<"\n";
    return 0;
}