Pagini recente » Cod sursa (job #399316) | Cod sursa (job #1868592) | Cod sursa (job #2776081) | Cod sursa (job #101243) | Cod sursa (job #174160)
Cod sursa(job #174160)
#include <stdio.h>
int N, v[100005], P[100005], Q[100005], cnt;
int main(void)
{
int i, l, r, m, x;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &N);
for (i = 1; i <= N; ++i)
scanf("%d", &v[i]);
for (i = 1; i <= N; ++i)
{
if (v[i] > P[cnt])
P[++cnt] = v[i], Q[i] = cnt;
else
{
for (l = 1, r = cnt, x = 0; l <= r; )
{
m = (l + r) / 2;
if (P[m] <= v[i]) l=m+1;
else x = m, r=m-1;
}
P[x] = v[i]; Q[i] = x;
}
}
printf("%d\n", cnt);
for (i = N, x = 0; i && cnt; --i)
if (Q[i] == cnt)
P[++x] = v[i], --cnt;
for (i = x; i; --i)
printf("%d ", P[i]);
return 0;
}