Pagini recente » Cod sursa (job #1428295) | Cod sursa (job #973201) | Cod sursa (job #1444511) | Cod sursa (job #2835) | Cod sursa (job #2670422)
#include <bits/stdc++.h>
using namespace std;
int lscmax, lmax, pozmax,elemmax, n, x, k, maxim, dp[100005];
int V[100005];
int From[100005];
vector <int> F;
void fast ()
{
ios_base::sync_with_stdio(false);
cin.tie();
}
int main()
{
fast();
freopen("scmax.in","r", stdin);
freopen("scmax.out","w", stdout);
cin >> n;
for (int i=1; i<=n; i++)
{
cin >> x;
V[i]=x;
}
/// cazul de baza
dp[1]=1;
for (int i=2; i<=n; i++)
{
maxim=0;
for (int j=1; j<i; j++)
{
if (V[j]<V[i])
{
if (dp[j]>maxim)
{
maxim =dp[j];
From[i]=j;
}
}
}
/// dp[i] cel mai lung subsir care se termina in elementul V[i]; incep dp[2]
dp[i] = maxim + 1;
if (dp[i]>lmax)
{
lmax=dp[i];
pozmax=i;
}
}
cout << lmax << endl;
int curent = pozmax;
while (curent!=0)
{
F.push_back(curent);
curent=From[curent];
}
for (int i=(int)F.size()-1; i>=0; i--)
cout << V[F[i]] << " ";
return 0;
}