Cod sursa(job #2492399)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 14 noiembrie 2019 18:00:44
Problema Curcubeu Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <fstream>

#define NMAX 1000005
using namespace std;

struct chestie{
    int st, dr, c;
}query[NMAX];

int nex[NMAX], rez[NMAX];

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

    long long N, A1, B1, C1;
    scanf("%lld%lld%lld%lld", &N, &A1, &B1, &C1);

    query[1] = {.st = min(A1, B1), .dr = max(A1, B1), .c = C1};
    for(int i = 2; i <= N - 1; ++i){
        A1 = (A1 * i) % N;
        B1 = (B1 * i) % N;
        C1 = (C1 * i) % N;

        query[i] = {.st = min(A1, B1), .dr = max(A1, B1), .c = C1};
    }

    for(int i = 1; i < N; ++i)
        nex[i] = i + 1;

    for(int i = N - 1; i >= 1; --i){
        int j = query[i].st;
        while(j <= query[i].dr){
            if(rez[j] == 0)
                rez[j] = query[i].c;
            int cj = j;
            j = nex[j];

            nex[cj] = max(nex[cj], nex[query[i].dr]);
        }
    }

    for(int i = 1; i < N; ++i)
        printf("%d\n", rez[i]);
    return 0;
}