Pagini recente » Cod sursa (job #2429304) | Cod sursa (job #2589520) | Cod sursa (job #940440) | Cod sursa (job #325490) | Cod sursa (job #1446915)
#include <stdio.h>
const int Max = 100001;
int N,Sol = 0,A[Max],LIS[Max],P[Max],S[Max];
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]);
int F = 1,L = Sol;
while (F <= L)
{
int Mid = (L + F) / 2;
if (A[LIS[Mid]] < A[i]) F = Mid + 1;
else L = Mid - 1;
}
P[i] = LIS[F-1];
LIS[F] = i;
if (F > Sol) Sol = F;
}
N = LIS[Sol];
for (int i = Sol;i > 0;i--)
{
S[i] = A[N];
N = P[N];
}
printf("%d\n",Sol);
for (int i = 1;i <= Sol;i++) printf("%d ",S[i]);
return 0;
}