Pagini recente » Cod sursa (job #2735749) | Cod sursa (job #1093983) | Cod sursa (job #3183150) | Cod sursa (job #2422946) | Cod sursa (job #1255934)
#include <cstdio>
using namespace std;
int v[100010], st[100010], sol[100010];
void bin (int x, int i)
{
int a = 1, b = st[0];
while (a <= b)
{
int m = (a + b) >> 1;
if (x == st[m])
{
a = m;
break;
}
else if (x < st[m]) b = m - 1;
else if (x > st[m]) a = m + 1;
}
if (a > st[0]) st[++st[0]] = x, sol[i] = a;
else st[a] = x, sol[i] = a;
}
int main ()
{
freopen ("scmax.in", "r", stdin);
freopen ("scmax.out", "w", stdout);
int n;
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
{
scanf ("%d", &v[i]);
if (i == 1) st[++st[0]] = v[i], sol[i] = 1;
else bin (v[i], i);
}
int k = 0;
for (int i = n; i; --i)
if (sol[i] == st[0]) st[++k] = v[i], --st[0];
printf ("%d\n", k);
for (int i = k; i; --i)
printf ("%d ", st[i]);
printf ("\n");
return 0;
}