Cod sursa(job #1146580)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 19 martie 2014 09:18:55
Problema Curcubeu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<cstdio>

using namespace std;

#define max_n 1000010

FILE*f = fopen("curcubeu.in" , "r");
FILE*g = fopen("curcubeu.out" , "w");

int n , A[max_n] , B[max_n] , C[max_n] , tmp;
int st , dr , Color[max_n] , Jump[max_n];

void read(){
    fscanf(f , "%d%d%d%d" , &n , &A[1] , &B[1] , &C[1] );
}

int minim( int a , int b ){
    return a < b ? a : b;
}

int maxim( int a , int b ){
    return a > b ? a : b;
}

int main(){

    read();

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

    for( int i = n - 1 ; i >= 1 ; i-- ){
        st = minim( A[i] , B[i] );
        dr = maxim( A[i] , B[i] );

        while( st <= dr ){

            if( Jump[st] != 0 ){
                tmp = Jump[st];
                Jump[st] = maxim(dr + 1 , Jump[st]);
                st = tmp;
            }
            else{
                Color[st] = C[i];
                Jump[st] = dr + 1;
                st++;
            }
        }
    }

    for( int i = 1 ; i < n ; i++ )
        fprintf(g , "%d\n" , Color[i] );

    return 0;
}