Pagini recente » Cod sursa (job #1110123) | Cod sursa (job #2650188) | Cod sursa (job #741786) | Cod sursa (job #2862310) | Cod sursa (job #2674478)
#include <stdio.h>
#include <stdlib.h>
#define N 100000
int v[N], l[N], n;
FILE *in, *out;
void subsir(int p)
{
int i = p - 1;
while (i >= 0 && (v[i] >= v[p] || l[i] != l[p] - 1))///n-am gasit predecesorul lui v[p]
{
i--;
}
if (i >= 0)
{
subsir(i);
}
fprintf(out, "%d ", v[p]);
}
int main()
{
in = fopen("scmax.in", "r");
out = fopen("scmax.out", "w");
fscanf(in, "%d", &n);
int i, j, imax = 0;
for (i = 0; i < n; i++)
{
fscanf(in, "%d", &v[i]);
}
fclose(in);
l[0] = 1;
for (i = 1; i < n; i++)
{
int lc = 0;
for (j = 0; j < i; j++)
{
if (v[j] < v[i])///pot sa-l adaug pe v[i] la subsiruri terminate pe poz j
{
if (l[j] > lc)
{
lc = l[j];
}
}
}
l[i] = 1 + lc;
if (l[i] > l[imax])
{
imax = i;
}
}
fprintf(out, "%d\n", l[imax]);
subsir(imax);
fclose(out);
return 0;
}