Pagini recente » Cod sursa (job #2143516) | Cod sursa (job #2078480) | Cod sursa (job #2029195) | Cod sursa (job #2481785) | Cod sursa (job #2553617)
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int N = 100003;
int n ;
int pozmax;
int v[N], dp[N], urm[N];
int main() {
cin >> n;
for( int i =1 ;i <=n;i++)
cin >> v[i];
dp[n] = 1; urm[n] = 0;
for( int i = n - 1 ; i > 0 ; i--)
{
dp[i] = 1; urm[i] = 1;
for( int j =i + 1 ;j <=n ;j ++)
{
if(v[i] < v[j] and dp[i] < dp[j] + 1)
{
dp[i] = 1 + dp[j];
urm[i] = j;
}
}
}
/// det lungimea maxima
int maxim = dp[1];
pozmax = 1;
for( int i = 2 ;i <=n;i ++)
if(maxim < dp[i]){
maxim = dp[i];
pozmax = i;
}
cout << maxim<< '\n';
/// afisez subsir cresc de lungime max
int i = pozmax;
while( i != 0)
{
cout << v[i]<<" ";
i = urm[i];
}
return 0;
}