Pagini recente » Cod sursa (job #2490959) | Cod sursa (job #2129067) | Cod sursa (job #1537996) | Profil Night_Angel1994 | Cod sursa (job #2591400)
#include <iostream>
#include <stdio.h>
using namespace std;
const int NMAX = 100005;
int v[NMAX], pmin[NMAX], pred[NMAX];
int n, m;
int caut_bin(int val) {
int pas, p;
pas = 1 << 16;
p = 0;
while (pas > 0) {
if (p + pas <= m && v[pmin[p + pas]] < val)
p += pas;
pas /= 2;
}
return p;
}
void afisare(int p) {
if (pred[p] != 0)
afisare(pred[p]);
printf ("%d ", v[p]);
}
int main() {
freopen ("scmax.in", "r", stdin);
freopen ("scmax.out", "w", stdout);
int i, p;
scanf ("%d", &n);
for (i = 1; i <= n; i++)
scanf ("%d", &v[i]);
pmin[++m] = 1;
for (i = 2; i <= n; i++) {
p = caut_bin(v[i]);
pmin[p + 1] = i;
pred[i] = pmin[p];
if (p == m)
m++;
}
printf ("%d\n", m);
afisare(pmin[m]);
return 0;
}