Cod sursa(job #1669451)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 30 martie 2016 18:38:40
Problema Curcubeu Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

const int DIM = 1000010;
using namespace std;

int V[DIM], Next[DIM], A[DIM], B[DIM], C[DIM], N, p;

int main() {

    FILE *input_file  = fopen( "curcubeu.in" , "r" );
    FILE *output_file = fopen( "curcubeu.out", "w" );

    fscanf( input_file, "%d %d %d %d", &N, &A[1], &B[1], &C[1] );

    for( int i = 2; i < N; i ++ ) {
        A[i] = ( A[i - 1] * 1LL * i ) % N;
        B[i] = ( B[i - 1] * 1LL * i ) % N;
        C[i] = ( C[i - 1] * 1LL * i ) % N;
    }

    for( int i = 1; i < N; i ++ )
        Next[i] = i + 1;

    for( int i = N - 1; i >= 1; i -- ) {
        if( A[i] > B[i] )
            swap( A[i], B[i] );

        Next[ A[i] - 1 ] = B[i] + 1;
        for( int j = A[i]; j <= B[i]; ) {
            while( V[j] != 0 ) {
                p = j;
                j = Next[j];
                Next[p] = max( B[i] + 1, Next[p] );
            }

            if( j > B[i] )
                break;

            V[j] = C[i];
            Next[j] = B[i] + 1;
            j ++;
        }
    }

    for( int i = 1; i < N; i ++ )
        fprintf( output_file, "%d\n", V[i] );

    return 0;
}