Pagini recente » Cod sursa (job #1248786) | Cod sursa (job #2423175) | Cod sursa (job #1609402) | Cod sursa (job #1083768) | Cod sursa (job #1679015)
#include <algorithm>
#include <cstdio>
FILE*f=fopen("scmax.in","r");
FILE*g=fopen("scmax.out","w");
int N, a[100003], best[100003], prec[100003], sol[100003], k;
int MAXX, pozmax;
int main() {
fscanf(f, "%d", &N);
for ( int i=1 ; i<=N ; i++ )
fscanf(f, "%d", &a[i]);
for ( int i=1 ; i<=N ; i++ )
for ( int j=0 ; j< i ; j++ )
if ( a[j] < a[i] && best[j] + 1 > best[i] ) {
best[i] = best[j] + 1;
prec[i] = j;
if ( best[i] > MAXX ) MAXX = best[i], pozmax = i;
}
fprintf(g, "%d\n", MAXX);
sol[++k] = a[pozmax];
do
{
pozmax = prec[pozmax];
sol[++k] = a[pozmax];
} while ( prec[pozmax] != 0 );
std::reverse(sol+1, sol+k+1);
for ( int i=1 ; i<=k ; i++ )
fprintf(g, "%d ", sol[i]);
}