Cod sursa(job #3127750)

Utilizator PVDoriginalPopescu Vladut Daniel PVDoriginal Data 7 mai 2023 19:41:56
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<bits/stdc++.h>
using namespace std;

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

    int main(){

        //ios_base::sync_with_stdio(false);
        //cin.tie(NULL);

        int n;

        fin >> n;
        vector<int> a(n-1), b(n-1), c(n-1);
        fin >> a[0] >> b[0] >> c[0];

        if(b[0] < a[0]) swap(a[0], b[0]);

        vector<int> right(n-1, 0);
        right[0] = 1;

        vector<int> v(n-1, 0);


        for(int i = 1; i < n-1; ++i){
            a[i] = (a[i-1]*(i+1))%n, b[i] = (b[i-1]*(i+1))%n, c[i] = (c[i-1]*(i+1))%n;
            if(b[i] < a[i]) swap(a[i], b[i]);
            right[i] = i+1;
        }

        int t;

        for(int i = n-2; i >= 0; --i){

            --a[i]; --b[i];

            //cout << a[i]+1 << " " << b[i]+1 << " " << c[i] << "\n";

            int j = a[i];

            while(j <= b[i]){

                if(v[j]){j = right[v[j]]; continue;}

                v[j] = c[i];

                t = right[j];
                right[j] = b[i]+1;
                j = t;
            }

            //for(const auto x : v)
            //    cout << x << " ";
            //cout << "\n";
        }

        for(int i = 0; i < n-1; ++i)
            fout << v[i] << "\n";
    }