Pagini recente » Clasament concurs_11_12_02_26 | Cod sursa (job #2824362) | Cod sursa (job #2575160) | Cod sursa (job #2622295) | Cod sursa (job #1455299)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("scmax.in") ;
ofstream fout ("scmax.out") ;
long int v[100001], l[100001] , n , i , k , maxim , t;
void Citire()
{
fin >> n;
for ( i = 1 ; i <= n ; ++i )
fin >> v[i] ;
}
void SubsirCrescatorMaximal ( long int n , long int v[] )
{
l [n] = 1 ;
for ( k = n-1 ; k >=1 ; -- k )
{
maxim = 0;
for ( i = k + 1 ; i <= n ; ++ i )
if ( v[i] > v[k] && l[i] > maxim )
maxim = l[i];
l[k] = 1 + maxim;
}
maxim = l[1];
t = 1;
for ( i = 2 ; i <= n ; ++ i )
if ( l[i] > maxim )
{
maxim = l[i];
t = i;
}
fout << maxim << "\n" ;
fout<<v[t]<<" ";
for ( i = t + 1 ; i <= n ; ++ i )
if ( v[i] > v[t] && l[i] == maxim - 1 )
--maxim , fout << v [i] << " ";
}
int main()
{
Citire ();
SubsirCrescatorMaximal ( n , v );
return 0;
}