Pagini recente » Cod sursa (job #1465178) | Cod sursa (job #328831) | Cod sursa (job #3272024) | Cod sursa (job #1655972) | Cod sursa (job #1462831)
#include <stdio.h>
#include <string.h>
#define nmax 100005
#define size 1500000
int n, a[nmax], P[nmax], prev[nmax], p[nmax], i, j, len, max, imax;
char string[size];
int main()
{
FILE *in, *out;
in = freopen("scmax.in", "r", stdin);
out = freopen("scmax.out", "w", stdout);
fscanf(in, "%d\n", &n);
fgets(string, size, in);
i = 1;
len = strlen(string);
for (j = 0; j < len; j++)
{
if (string[j] == ' ')
continue;
while (string[j] >= '0' && string[j] <= '9')
a[i] = a[i]*10 + string[j++] - '0';
i++;
}
for (i = 1; i <= n; i++)
{
P[i] = 1;
prev[i] = -1;
}
for (j = 2; j <= n; j++)
{
int m = 0;
for (i = 1; i < j; i++)
{
if (a[i] < a[j])
{
if (m < 1 + P[i])
{
m = 1 + P[i];
prev[j] = i;
}
}
}
P[j] = (m > P[j] ? m : P[j]);
if (m > max)
{
max = m;
imax = j;
}
}
i = 1;
while (imax > 0)
{
p[i++] = a[imax];
imax = prev[imax];
}
printf("%d\n", max);
for (i = max; i >= 1; i--)
printf("%d ", p[i]);
fclose(in);
fclose(out);
return 0;
}