Pagini recente » Cod sursa (job #3352800) | Cod sursa (job #3323211) | Cod sursa (job #3354431) | Cod sursa (job #548630) | Cod sursa (job #3339433)
#include <fstream>
using namespace std;
int v[100001], d[100001], t[100001], n, u, sol, p, maxi;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
void drum (int u)
{
if (u > 0)
{
drum (t[u]);
cout << v[u] << " ";
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
d[1] = 1;
for (int i = 2; i <= n; i++)
{
maxi = 0;
for (int j = 1; j < i; j++)
if ((v[j] <= v[i]) && (d[j] > maxi))
{
maxi = d[j];
p = j;
}
d[i] = maxi + 1;
if (d[i] != 1) t[i] = p;// daca am un subsir cu m mult de 1 elem
else t[i] = 0;
if (d[i] > sol) {
sol = d[i]; // actualizez lungimea maxima a unui subsir
u = i;
}
}
cout << sol << '\n';
drum (u);
return 0;
}