Cod sursa(job #1393431)

Utilizator rzvrzvNicolescu Razvan rzvrzv Data 19 martie 2015 13:50:20
Problema Curcubeu Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
#include<algorithm>

using namespace std;

int n,a[1000000],b[1000000],c[1000000],i,j,aux,urm[1000000],st,dr,ans[1000000];

int MIN(int x,int y)
{
    if(x<y)
    {
        return x;
    }
    return y;
}

int MAX(int x,int y)
{
    if(x>y)
    {
        return x;
    }
    return y;
}

int main()
{
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    scanf("%d%d%d%d",&n,&a[1],&b[1],&c[1]);
    for(i=2;i<n;i++)
    {
        a[i]=a[i-1]*i;
        a[i]%=n;
        b[i]=b[i-1]*i;
        b[i]%=n;
        c[i]=c[i-1]*i;
        c[i]%=n;
    }
    for(i=n-1;i>0;i--)
    {
        st=MIN(a[i],b[i]);
        dr=MAX(a[i],b[i]);
        for(j=st;j<=dr;j++)
        {
            if(!urm[j])
            {
                ans[j]=c[i];
                urm[j]=dr+1;
            }
            else
            {
                aux=urm[j];
                if(urm[j]<dr+1)
                {
                    urm[j]=dr+1;
                }
                j=aux-1;
            }
        }
    }
    for(i=1;i<n;i++)
    {
        printf("%d\n",ans[i]);
    }
}