Pagini recente » Cod sursa (job #626332) | Cod sursa (job #2034075) | Cod sursa (job #2119118) | Cod sursa (job #882144) | Cod sursa (job #1375708)
#include <cstdio>
#include <algorithm>
using namespace std;
int N;
int A[100002], ST[100002], T[100002];
void track(int x)
{
if (x == 0) return;
track(T[x]);
printf("%d ", A[x]);
}
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]);
for (int i = 1; i <= N; ++i)
{
int step = (1 << 16), now = 0;
for (; step; step >>= 1)
if (now + step <= ST[0] && A[ST[now + step]] < A[i])
now += step;
++now;
ST[now] = i;
if (now != 1)
T[i] = ST[now - 1];
else
T[i] = 0;
ST[0] = max(ST[0], now);
}
printf("%d\n", ST[0]);
track(ST[ST[0]]);
}