Cod sursa(job #757534)

Utilizator raluca_vacaruVacaru Raluca-Ioana raluca_vacaru Data 12 iunie 2012 16:45:23
Problema Subsir crescator maximal Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#define NMAX 100001 
using namespace std ;

short int nr[NMAX], pre[NMAX] ; 
int n ;
long v[NMAX] ;


int main () {
	int i, j ;
	freopen ( "scmax.in", "r", stdin ) ;
	scanf ( "%d\n", &n ) ;
	for ( i=1; i<=n; ++i ) 
		scanf ( "%ld ", &v[i] ) ;
	fclose ( stdin ) ;
	v[1] = 1 ;
	for ( i=2; i<=n; ++i ) 
		for ( j=1; j<=i; ++j ) 
			if ( v[i] > v[j] ) 
				if ( nr[j] + 1 > nr[i] ) {
					nr[i] = nr[j] + 1 ;
					pre[i] = j ;
			//		printf ( "\n" ) ;
			//		for ( i=1; i<=n; ++i ) printf ( "%hd ", pre[i] ) ;
				}
	int Max = 1, jm = 0 ;
	for ( i=1; i<=n; ++i ) 
		if ( nr[i] > Max ) {
			Max = nr[i] ;
			jm = pre[i] ;
		}
	for ( i=1; i<=n; ++i ) printf ( "%hd ", nr[i] ) ;
	printf ( "\n" ) ;
	for ( i=1; i<=n; ++i ) printf ( "%hd ", pre[i] ) ;
	freopen ( "scmax.out", "w", stdout ) ;
	printf ( "%d\n", Max ) ;
	short int l = 0 , poz[NMAX] ;
	do {
		poz[++l] = pre[jm] ;
		jm = pre[jm] ;
	} while ( pre[jm] != 0 ) ;
	for ( i=l; i>=1; --i ) 
		printf ( "%ld ", v[poz[i]] ) ;
	fclose ( stdout ) ;
	return 0 ;
}