Pagini recente » Cod sursa (job #867587) | Cod sursa (job #407339) | Cod sursa (job #2433268) | Cod sursa (job #155291) | Cod sursa (job #3221628)
#include <fstream>
using namespace std;
int v[100005], dp[100005], prv[100005], sol[100005];
int main()
{
ifstream cin( "scmax.in" );
ofstream cout( "scmax.out" );
int n, i, cnt = 0, j, maxcnt = 0, st, dr;
cin >> n;
for( i = 0; i < n; i++ ){
cin >> v[i];
}
for( i = 0; i < n; i++ ){
dp[i] = 1;
prv[i] = -1;
for( j = 0; j < i; j++ ){
if( v[j] < v[i] ){
if( dp[j] + 1 > dp[i] ){
prv[i] = j;
}
dp[i] = max( dp[j] + 1, dp[i] );
}
}
if( dp[i] > maxcnt ){
st = i;
dr = prv[i];
maxcnt = dp[i];
}
}
cout << maxcnt << '\n';
int k = 0, poz = st;
while( poz != -1 ){
k++;
sol[k] = v[poz];
poz = prv[poz];
}
for( i = k; i >= 1; i-- ){
cout << sol[i] << ' ';
}
return 0;
}