Cod sursa(job #2721925)

Utilizator SqueekDanielTodasca Daniel SqueekDaniel Data 12 martie 2021 14:19:43
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>

#define MaxN 1000005
#define MAXN 1000005

std::ifstream InFile("curcubeu.in");

int N, A[MaxN], B[MaxN], C[MaxN],
    Next[MaxN], Color[MaxN];
bool Seen[MaxN];


std::vector <int> begin[MAXN];
std::vector <int> end[MAXN];

void Citire() {
    InFile >> N >> A[1] >> B[1] >> C[1];

    for (int i=1; i<N-1; ++i) {
        A[i+1] = (1LL*A[i]*(i+1)) % N,
        B[i+1] = (1LL*B[i]*(i+1)) % N,
        C[i+1] = (1LL*C[i]*(i+1)) % N;
    }
}
void Rezolvare() {
    for (int i=1; i<=N-1; ++i) {
        begin[A[i]].push_back(i);
        end[B[i]].push_back(i);
    }

    freopen("curcubeu.out", "w", stdout);

    std::multiset <int> multiset;
    for (int i=0; i<=N-1; ++i) {
        for (auto &it:begin[i]) {
            multiset.insert(-it);
        }

        if (!multiset.empty())
            Color[i] = C[-*multiset.begin()];

        for (auto &it:end[i]) {
            multiset.erase(-it);
        }
    }

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


int main() {
    Citire();
    Rezolvare();

    return 0;
}