Pagini recente » Cod sursa (job #1643788) | Cod sursa (job #1360634) | Cod sursa (job #2910674) | Cod sursa (job #64789) | Cod sursa (job #180383)
Cod sursa(job #180383)
#include <stdio.h>
#include <vector>
using namespace std;
#define nm 100100
#define inf 2100000000
int n, a[nm], c[nm], v[nm], sol;
vector<int> d;
int bs(int val)
{
int rez = 0;
for (int step = (1 << 17); step; step /= 2)
if (rez + step <= sol && v[rez + step] < val)
rez += step;
return rez;
}
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]);
int pos = bs(a[i]) + 1;
v[pos] = a[i];
c[i] = pos;
if (sol < pos)
sol = pos;
}
printf("%d\n", sol);
int last = inf;
for (int i = n, j = sol; j; --j) {
while (c[i] > j || a[i] >= last)
--i;
last = a[i];
d.push_back(a[i]);
}
for (int i = d.size() - 1; i >= 0; --i)
printf("%d ", d[i]);
printf("\n");
return 0;
}