Cod sursa(job #2567699)

Utilizator Radu_FilipescuFilipescu Radu Radu_Filipescu Data 3 martie 2020 18:26:23
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1000005;

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

int N;
struct mzg {
   int L, R;
   int c;
} a[NMAX];

int m[NMAX];
int sz[NMAX];
int jump[NMAX];
int color[NMAX];

int Find( int a ) {
    int r = a;
    while( r != m[r] ) {
       r = m[r];
    }
    while( a != m[a] ) {
       int aux = m[a];
       m[a] = r;
       a = aux;
    }
    return r;
}

void Union( int a, int b ) {   /// Lorenna - Lasa-mi Doamne soacra muta
    a = Find( a );
    b = Find( b );

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

    m[b] = a;
    sz[a] += sz[b];
}

void Read() {   /// SE CITESTE DATELE
    fin >> N >> a[1].L >> a[1].R >> a[1].c;

    for( int i = 2; i < N; ++i ) {
       a[i].L = ( 1LL * a[i - 1].L * i ) % N;
       a[i].R = ( 1LL * a[i - 1].R * i ) % N;
       a[i].c = ( 1LL * a[i - 1].c * i ) % N;
    }
}

void Do()
{
    for( int i = N - 1; i > 0; --i ) {
       int lf = a[i].L, rg = a[i].R;

       jump[i] = rg;
       for( int j = lf; j <= rg; ++j ) {
         if( color[j] != 0 ) { j = jump[ color[j] ]; }
         color[j] = i;
       }
    }

    for( int i = 1; i < N; ++i )
      fout << a[color[i]].c << '\n';
}

int main()
{
    Read();
    Do();

    return 0;
}