Cod sursa(job #1651431)

Utilizator SilviuIIon Silviu SilviuI Data 13 martie 2016 12:12:22
Problema Curcubeu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#include <stack>
#include <algorithm>
#define nmax 1000010

using namespace std;

int n,a,b,c;
int ti[nmax],color[nmax],st[nmax],dr[nmax],sol[nmax];
stack <int> stt;

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

    scanf("%d %d %d %d",&n,&a,&b,&c);

    ti[min(a,b)]=ti[max(a,b)]=1; color[1]=c; dr[1]=max(a,b);

    for (int i=2;i<=n-1;i++) {
        a=(1LL*a*i)%n; b=(1LL*b*i)%n; c=(1LL*c*i)%n;
        ti[min(a,b)]=i; ti[max(a,b)]=i;
        color[i]=c; st[i]=min(a,b); dr[i]=max(a,b);
    }

    for (int i=1;i<=n-1;i++) {
        if (stt.size()==0 && ti[i]>0) stt.push(ti[i]),sol[i]=color[ti[i]];
        if (stt.size()>0 && ti[i]>stt.top()) stt.push(ti[i]),sol[i]=color[ti[i]];
        if (stt.size()>0 && ti[i]<=stt.top()) sol[i]=color[stt.top()];
        if (stt.size()>0 && i==dr[stt.top()]) stt.pop();
    }

    for (int i=1;i<=n-1;i++) printf("%d\n",sol[i]);

    return 0;
}