Cod sursa(job #3360428)

Utilizator MihaiDraghiciMIHAI DRAGHICI MihaiDraghici Data 13 iulie 2026 19:18:28
Problema Curcubeu Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

struct Padure {

    vector<int> padure;

    Padure(int n) {

        padure.resize(n + 2);

        for(int i = 1; i <= n + 1; i++){

            padure[i] = i;

        }

    }

    int rad(int i) {

        if (padure[i] == i) {

            return i;

        }

        padure[i] = rad(padure[i]);

        return padure[i];

    }

};

struct op {

    int a, b, c;

};

ifstream fin("curcubeu.in");
ofstream fout("curcubeu.out");

int main() {

    int n;
    fin >> n;

    vector<op> v(n);

    fin >> v[1].a >> v[1].b >> v[1].c;

    for(int i = 2; i < n; i++){

        v[i].a = (1LL * v[i - 1].a * i) % n;
        v[i].b = (1LL * v[i - 1].b * i) % n;
        v[i].c = (1LL * v[i - 1].c * i) % n;

    }

    Padure padure(n);

    vector<int> ans(n + 1, 0);

    for(int i = n - 1; i >= 1; i--){

        int st = min(v[i].a, v[i].b);
        int dr = max(v[i].a, v[i].b);

        int p = padure.rad(st);

        while(p <= dr){

            ans[p] = v[i].c;

            padure.padure[p] = p + 1;

            p = padure.rad(p);

        }

    }

    for(int i = 1; i < n; i++){

        fout << ans[i] << '\n';

    }

    return 0;

}