Pagini recente » Cod sursa (job #2528924) | Cod sursa (job #280898) | Cod sursa (job #772754) | Cod sursa (job #1404020) | Cod sursa (job #210081)
Cod sursa(job #210081)
#include <cstdio>
#define MAXN 100001
int N;
int V[MAXN];
int S[MAXN], L[MAXN];
int sol[MAXN];
void read (){
scanf ("%d\n", &N);
for (int i = 1; i <= N; ++ i) scanf (" %d", V + i);
}
int binsearch (int val, int lim){
int i, step = (1<<17);
for (i = 0; step; step >>= 1)
if (i + step <= lim && S[i + step] < val) i += step;
return i;
}
void solve (){
int k, lim, fnd, t;
S[1] = V[1], L[1] = 1;
for (lim = 1, k = 2; k <= N; ++ k){
fnd = binsearch (V[k], lim) + 1;
S[fnd] = V[k];
if (fnd > lim) ++ lim;
L[k] = fnd;
}
printf ("%d\n", lim); t = lim;
for (int i = N; i >= 1; -- i)
if (L[i] == t) sol[t] = V[i], --t;
for (int i = 1; i <= lim; ++ i) printf ("%d ", sol[i]);
printf ("\n");
}
int main (){
freopen ("scmax.in", "r", stdin);
freopen ("scmax.out", "w", stdout);
read ();
solve ();
return 0;
}