Cod sursa(job #2262306)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 17 octombrie 2018 10:19:02
Problema Curcubeu Scor 20
Compilator cpp-64 Status done
Runda concurs_micut Marime 1.09 kb
#include <cstdio>
#include <algorithm>
#define NMAX 1000005

using namespace std;

int a[NMAX],b[NMAX],c[NMAX],imobiliare[NMAX],nexxt[NMAX];

inline void zugravesteContraCost(int &st,int &dr,int &culoare);

int main()
{
    freopen("curcubeu.in","r",stdin);
    freopen("curcubeu.out","w",stdout);
    int x,y,z,n;
    scanf("%d%d%d%d",&n,&a[1],&b[1],&c[1]);
    for(int i = 2 ; i < n ; i++)
    {
        a[i] = 1LL*(a[i-1]*i)%n;
        b[i] = 1LL*(b[i-1]*i)%n;
        c[i] = 1LL*(c[i-1]*i)%n;
    }
    for(int i = n-1 ; i >= 1 ; i--)
    {
        int st,dr;
        st = min(a[i],b[i]);
        dr = max(a[i],b[i]);
        zugravesteContraCost(st,dr,c[i]);
    }
    for(int i = 1 ; i < n ; i++)
        printf("%d\n",imobiliare[i]);
    return 0;
}

inline void zugravesteContraCost(int &st,int &dr,int &culoare)
{
    for(int i = st ; i <= dr ; i++)
    {
        if(imobiliare[i] == 0)
        {
            nexxt[i] = dr+1;
            imobiliare[i] = culoare;
        }
        else
        {
            i = nexxt[i];
            i--;
        }
    }
}