Pagini recente » Borderou de evaluare (job #2247384) | Cod sursa (job #911419) | Cod sursa (job #3211223) | Cod sursa (job #675016) | Cod sursa (job #676655)
Cod sursa(job #676655)
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
using namespace std;
#define NM 100005
int N, A[NM], B[NM], W[NM];
int main()
{
freopen ("scmax.in", "r", stdin);
freopen ("scmax.out", "w", stdout);
scanf ("%d", &N);
for (int i = 1; i <= N; ++i) scanf ("%d", &A[i]);
for (int i = 1; i <= N; ++i)
for (int j = 0; j < i; ++j)
if (A[i] > A[j] && B[j] + 1 > B[i])
{
B[i] = B[j] + 1;
W[i] = j;
}
int best = 0, p;
for (int i = 1; i <= N; ++i)
if (B[i] > best)
{
best = B[i];
p = i;
}
printf ("%d\n", best);
B[0] = 0;
while (p)
{
B[++B[0]] = A[p];
p = W[p];
}
for (int i = B[0]; i > 0; --i) printf ("%d ", B[i]);
return 0;
}