Pagini recente » Cod sursa (job #3160533) | Cod sursa (job #3192819) | Cod sursa (job #3126911) | Cod sursa (job #2598870) | Cod sursa (job #2179513)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, maxi, p;
int arr[100005];
int d[100005]; ///LUNGIMEA MAXIMA A UNUI SUBSIR CRESCATOR TERMINAT PE POZ I
int t[100005]; ///T[I] REPREZINTA POZITIA ELEMENTULUI DUPA CARE E SITUAT ELEMENTUL DE PE POZ I IN SUBSIRUL
///DE LUNGIME MAXIMA TERMINAT PE POZ I
int v[100005], k;
int main()
{
in>>n;
for( int i = 1; i <= n; i++ )
in>>arr[i];
d[1] = 1;
t[1] = -1;
for( int i = 2; i <= n; i++ )
{
maxi = -1;
p = -1;
for( int j = 1; j < i; j++ )
if( arr[j] < arr[i] && d[j] > maxi )
{
maxi = d[j];
p = j;
}
if( maxi != -1 )
{
d[i] = maxi + 1;
t[i] = p;
}
else
{
d[i] = 1;
t[i] = -1;
}
}
maxi = -1;
p = -1;
for( int i = 1; i <= n; i++ )
if( maxi < d[i] )
{
maxi = d[i];
p = i;
}
out<<maxi<<"\n";
while( p != -1 )
{
v[++k] = arr[p];
p = t[p];
}
for( int i = k; i >= 1; i-- )
out<<v[i]<<" ";
return 0;
}