Cod sursa(job #1517934)

Utilizator gerd13David Gergely gerd13 Data 5 noiembrie 2015 00:19:00
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std ;


const int NMAX = 1000005 ;
const int INF = 0x3f3f3f3f ;

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

int N, V[NMAX], prim, l[NMAX], poz[NMAX], m, Min[NMAX], act[NMAX];


void afisare(int actual)
{
    if(poz[actual] != 0)
    afisare(poz[actual]) ;
    fout << V[actual] << ' ' ;

}

int main()
{
    fin >> N ;

    for(int i = 1 ; i <= N ; ++ i)
        fin >> V[i] ;


    m = -1 ;


    for(int i = 1 ; i <= N ; ++ i )
    {
        Min[i] = INF ;
        l[i] = m ;

        while(Min[l[i]] >= V[i] && l[i] > 0 ) l[i] -- ;

        poz[i] = act[l[i]] ;

        l[i] ++ ;

        if(l[i] > m)
        {
            m = l[i] ;
            prim = i ;
        }

        if(V[i] < Min[l[i]])
        {
            Min[l[i]] = V[i] ;
            act[l[i]] = i ;
        }

    }


    fout << m << '\n' ;


    afisare(prim) ;
    fout << '\n' ;

    fin.close() ;
    fout.close() ;
    return 0 ;
}