Cod sursa(job #3342697)

Utilizator ioanabaduIoana Badu ioanabadu Data 25 februarie 2026 11:55:35
Problema Curcubeu Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int n;
vector <int> a, b, c, father, ans;

int findRoot (int x){
    if (father[x] == x)
        return x;
    return findRoot(father[x]);
}

int main (){
    in >> n;

    a.resize(n+5);
    b.resize(n+5);
    c.resize(n+5);
    father.resize(n+5);
    ans.resize(n+5);

    in >> a[1] >> b[1] >> c[1];
    for (int i=2; i<n; ++i){
        a[i] = (a[i-1]*i)%n;
        b[i] = (b[i-1]*i)%n;
        c[i] = (c[i-1]*i)%n;
    }

    for (int i=1; i<=n+2; ++i)
        father[i] = i;

    int left, right;
    for (int i=n-1; i>=1; --i){
        left = min(a[i], b[i]);
        right = max(a[i], b[i]);

        if (left == 0)
            left = 1;

        for (int j=findRoot(left); j<=right; j=findRoot(j)){
            ans[j] = c[i];
            father[j] = j+1;
        }
    }

    for (int i=1; i<n; ++i)
        out << ans[i] << '\n';
    return 0;
}