Pagini recente » Cod sursa (job #2007407) | Cod sursa (job #655067) | Cod sursa (job #1524062) | Cod sursa (job #1853646) | Cod sursa (job #1539454)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int MN = 100005;
int N,Sol = 0;
int A[MN],LIS[MN],P[MN],S[MN];
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 idx = 0;
for (int j = 1 << 17;j;j /= 2)
if (j + idx <= Sol && A[LIS[j + idx]] < A[i])
idx += j;
P[i] = LIS[idx];
LIS[idx + 1] = i;
Sol = max(Sol,idx + 1);
}
N = LIS[Sol];
for (int i = Sol;i;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;
}