Pagini recente » Borderou de evaluare (job #2969884) | Cod sursa (job #1832623) | Cod sursa (job #2659935) | Cod sursa (job #3132522) | Cod sursa (job #1414122)
#include <cstdio>
#define MULT 2000000001
#define N 100000
int v[N +1], stiva[N +1], recon[N +1];
int n;
void afiseaza (int x) {
if (x == 0) {
return ;
}
afiseaza (recon[x]);
printf ("%d ", v[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", &v[i]);
}
v[0] = MULT;
int maxSecv = 0;
for (int i = 1; i <= n; i++) {
int poz = 0;
for (int pas = 1 << 17; pas; pas >>=1) {
if (poz + pas <= maxSecv && v[stiva[poz + pas]] < v[i]) {
poz += pas;
}
}
poz++;
if (poz > maxSecv) {
maxSecv = poz;
}
stiva[poz] = i;
recon[i] = stiva[poz - 1];
}
printf ("%d\n", maxSecv);
afiseaza (stiva[maxSecv]);
return 0;
}