Pagini recente » Cod sursa (job #102322) | Cod sursa (job #2880434) | Cod sursa (job #2036062) | Cod sursa (job #2649928) | Cod sursa (job #758837)
Cod sursa(job #758837)
#include <stdio.h>
#define NMAX 100005
#define INF 2000000005
int v[NMAX], p[NMAX], q[NMAX], N, s[NMAX];
int NR;
int insert(int val, int st, int dr)
{
int m;
m = ( st + dr) / 2;
if ( st == dr)
{
if ( dr > NR )
q[++NR + 1] = INF;
q[st] = val ;
return st;
}
else
if ( val <= q[m] )
return insert(val, st, m);
else
return insert(val, m + 1, dr);
}
void build()
{
int i;
q[1] = INF;
for ( i = 1; i <= N; i++)
p[i] = insert(v[i], 1, NR + 1);
}
void solution()
{
int i, k;
for ( k = N, i = NR; i; i--)
{
while ( p[k] != i)
k--;
s[i] = v[k];
}
printf("%d\n", NR);
for ( i = 1; i <= NR; i++)
printf("%d ", s[i]);
printf("\n");
}
int main()
{
int i;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &N);
for ( i = 1; i <= N; i++)
scanf("%d", &v[i]);
build();
solution();
return 0;
}