Pagini recente » Cod sursa (job #530508) | Cod sursa (job #1985478) | Cod sursa (job #1976646) | Cod sursa (job #1411708) | Cod sursa (job #1009578)
#include <cstdio>
int a[100001], b[100001], t[100001], l[100001], n, lsmax;
void Citire()
{
FILE *F = fopen("scmax.in", "r");
fscanf(F, "%d", &n);
for (int i = 1; i <= n; ++i)
fscanf(F, "%d", &a[i]);
fclose(F);
}
void Subsir()
{
int kmax, lmax;
t[1] = 0;
l[1] = 1;
for (int i = 2; i <= n; ++i)
{
kmax = lmax = 0;
for (int k = 1; k < i; ++k)
if (a[k] < a[i] && l[k] > lmax)
{
kmax = k;
lmax = l[k];
}
t[i] = kmax;
l[i] = lmax + 1;
}
}
void Reconstituire()
{
int imax;
for (int i = 1; i <= n; ++i)
if (l[i] > lsmax)
{
lsmax = l[i];
imax = i;
}
for (int i = lsmax; i >= 1; --i)
{
b[i] = a[imax];
imax = t[imax];
}
}
void Afisare()
{
FILE *G = fopen("scmax.out", "w");
fprintf(G, "%d\n", lsmax);
for (int i = 1; i <= lsmax; ++i)
fprintf(G, "%d ", b[i]);
fclose(G);
}
int main()
{
Citire();
Subsir();
Reconstituire();
Afisare();
return 0;
}