Pagini recente » Cod sursa (job #531327) | Cod sursa (job #1744408) | Cod sursa (job #706316) | Cod sursa (job #334702) | Cod sursa (job #269800)
Cod sursa(job #269800)
#include <stdio.h>
#define MAX_N 100001
int A[MAX_N], P[MAX_N], Q[MAX_N], Sol[MAX_N];
int N, M;
int BinarySearch(int v)
{
int p, i;
for ( p = 1; p <= M; p <<= 1 );
for ( i = 0; p; p >>= 1 )
if(i + p <= M && A[i+p] <= v)
i += p;
if(A[i] != v)
++ i;
return i;
}
int main()
{
freopen("scmax.in", "rt", stdin);
freopen("scmax.out", "wt", stdout);
int i;
for ( scanf("%d", &N), i = 1; i <= N; ++i )
scanf("%d", A+i);
for ( i = 1; i <= N; ++i )
{
if(A[i] > Q[M])
{
Q[++M] = A[i];
P[i] = M;
}
else
{
int j = BinarySearch(A[i]);
Q[j] = A[i];
P[i] = j;
}
}
printf("%d\n", M);
int k = M;
for ( i = N; i >= 1 && M; --i )
if(P[i] == M)
Sol[M--] = A[i];
for ( i = 1; i <= k; ++i )
printf("%d ", Sol[i]);
fclose(stdin);
fclose(stdout);
return 0;
}