Pagini recente » Rezultatele filtrării | Borderou de evaluare (job #846615) | Istoria paginii problema/obstacole | Cod sursa (job #1663090)
#include <fstream>
#define INF 100010
using namespace std;
int v[INF], l[INF], u[INF];
int main()
{
freopen ( "scmax.in", "r", stdin );
freopen ( "scmax.out", "w", stdout );
int n, i, j, maxj, in;
scanf ( "%d", &n );
for ( i = 1; i <= n; ++i )
scanf( "%d", &v[i] );
l[n] = 1;
for ( i = n - 1; i > 0; --i )
{
maxj = 0, in = 0;
for ( j = n; j > i; --j )
if ( v[i] < v[j] && l[j] >= maxj )
maxj = l[j], in = j;
l[i] = maxj + 1;
u[i] = in;
}
maxj = 0;
for ( i = 1; i <= n; ++i )
if ( l[i] > maxj )
maxj = l[i], in = i;
printf ( "%d\n", maxj );
while ( u[in] != 0 )
printf ( "%d ", v[in] ), in = u[in];
printf ( "%d ", v[in] );
return 0;
}