Cod sursa(job #86068)

Utilizator sealTudose Vlad seal Data 23 septembrie 2007 14:35:27
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Autumn Warmup 2007, Runda 2 Marime 1.12 kb
#include<stdio.h>
#define Nm (1<<20)
#define md (l+r>>1)
#define ls (n<<1)
#define rs (n<<1|1)
#define min(a,b) ((a)<(b)?(a):(b))
int C[Nm<<1],T[Nm<<1];

int x,y,c,i;

void update(int n, int l, int r)
{
    if(x<=l && r<=y)
    {
        C[n]=c;
        T[n]=i;
    }
    else
    {
        if(x<=md)
            update(ls,l,md);
        if(y>md)
            update(rs,md+1,r);
    }
}

int ans,t;

void query(int n, int l, int r)
{
    if(T[n]>t)
    {
        t=T[n];
        ans=C[n];
    }
    if(l<r)
        if(i<=md)
            query(ls,l,md);
        else
            query(rs,md+1,r);
}

int main()
{
    int n,a,b;

    freopen("curcubeu.in","r",stdin);
    scanf("%d%d%d%d",&n,&a,&b,&c);
    i=1; x=min(a,b); y=a+b-x;
    update(1,1,n-1);

    for(i=2;i<n;++i)
    {
        a=(long long)a*i%n;
        b=(long long)b*i%n;
        c=(long long)c*i%n;
        x=min(a,b); y=a+b-x;
        update(1,1,n-1);
    }

    freopen("curcubeu.out","w",stdout);
    for(i=1;i<n;++i)
    {
        t=0; ans=0; query(1,1,n-1);
        printf("%d\n",ans);
    }

    return 0;
}