Pagini recente » Cod sursa (job #1978182) | Cod sursa (job #950687) | Cod sursa (job #1452177) | Cod sursa (job #539122) | Cod sursa (job #1088647)
#include <cstdio>
#define NMAX 10000
using namespace std;
FILE * fin = fopen("scmax.in", "r");
FILE * fout = fopen("scmax.out", "w");
void citire();
void pd();
void constr_sol();
void afisare();
int n, a[NMAX];
int lg[NMAX];
int prec[NMAX];
int lgmax, sir[NMAX];
int main()
{
citire();
pd();
constr_sol();
afisare();
return 0;
}
void citire()
{
int i;
fscanf(fin, "%d", &n);
for (i = 1; i <= n; i ++)
fscanf(fin, "%d", &a[i]);
}
void pd()
{
int i, j;
lg[1] = 1;
prec[1] = 0;
for (i = 2; i <= n; i ++)
{
lg[i] = 1; prec[i] = 0;
for (j = 1; j < i; j ++)
if (a[j] < a[i] && lg[j] + 1 > lg[i])
{
lg[i] = 1 + lg[j];
prec[i] = j;
}
}
}
void constr_sol()
{
int i, crt, pozmax;
lgmax = 0;
for (i = 1; i <= n; i ++)
if (lgmax < lg[i])
{
lgmax = lg[i]; pozmax = i;
}
i = pozmax;
crt = 0;
while (i)
{
sir[++crt] = a[i];
i = prec[i];
}
}
void afisare()
{
int i;
fprintf(fout, "%d\n", lgmax);
for (i = lgmax; i > 0; i --)
fprintf(fout, "%d ", sir[i]);
fprintf(fout, "\n");
}