Pagini recente » Diferente pentru problema/shuffle intre reviziile 1 si 8 | Cod sursa (job #1760758) | Cod sursa (job #1794485) | Cod sursa (job #2955088) | Cod sursa (job #1672790)
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 100005;
int L, a[N], poz, p[N], s[N], v[N], n;
inline int Bs(int x)
{
int l = 1, r = L, m;
while (l <= r)
{
m = (l + r) / 2;
if (v[m] < x)
l = m + 1;
else
r = m - 1;
}
L = max(L, l);
return l;
}
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]);
p[i] = poz = Bs(a[i]);
v[poz] = a[i];
}
printf("%d\n", L);
for (int i = n, j = L; i >= 1; --i)
if (p[i] == j)
s[j] = a[i], --j;
for (int i = 1; i <= L; ++i)
printf("%d ", s[i]);
return 0;
}