Cod sursa(job #2721930)

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

#define MAXN 1000005

std::ifstream input("curcubeu.in");
std::ofstream output("curcubeu.out");

int N, A[MAXN], B[MAXN], C[MAXN], Color[MAXN];

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

void Citire() {
    input >> 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) {
        int u = std::min(A[i], B[i]);
        int v = std::max(A[i], B[i]);
        begin[u].push_back(i);
        end[v].push_back(i);
    }

    for (int i=0; i<=N-1; ++i) {
        for (auto &it:begin[i]) set.insert(-it);
        if (!set.empty())       Color[i] = C[-*set.begin()];
        for (auto &it:end[i])   set.erase(-it);
    }

    for (int i=1; i<=N-1; ++i)
        output << Color[i] << '\n';
}


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

    return 0;
}