Pagini recente » Cod sursa (job #322731) | Cod sursa (job #2310625) | Cod sursa (job #130448) | Cod sursa (job #2051170) | Cod sursa (job #858667)
Cod sursa(job #858667)
#include <cstdio>
#define LMAX 100000
int N,L;
int v[LMAX], s[LMAX], p[LMAX];
void citire() {
scanf("%d", &N);
for (int i=0; i<N; ++i)
scanf("%d", &v[i]);
}
int binsrch(int x) {
int step, i;
for (step=1; step<L; step<<=1);
for (i=L; step>0; step>>=1) {
if (i-step>=0 && s[i-step]>=x)
i-=step;
}
if (i==L) ++L;
return i;
}
void scmax() {
int poz;
for (int i=0; i<N; ++i) {
poz = binsrch(v[i]);
s[poz] = v[i];
p[i] = poz;
}
}
void elem(int i) {
if (i<0) return;
if (p[i]==L) {
--L;
elem(i-1);
printf("%d ",v[i]);
} else
elem(i-1);
}
int main () {
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
citire();
scmax();
printf("%d\n", L);
--L;
elem(N);
return 0;
}