Pagini recente » Cod sursa (job #2393255) | Cod sursa (job #2400392) | Cod sursa (job #935248) | Cod sursa (job #2116964) | Cod sursa (job #794143)
Cod sursa(job #794143)
#include <cstdio>
#define LMAX 100010
int N, lg;
int v[LMAX], s[LMAX], p[LMAX];
void chk(int k, int x) {
int i, step;
for (step=1; step<lg; step<<=1);
for (i=lg-1; step; step>>=1)
if (i-step>=0 && s[i-step]>=x)
i-=step;
if (s[i]>=x) {
s[i]=x;
p[k]=i;
} else {
s[lg]=x;
p[k]=lg++;
}
}
void afisare(int k) {
if (k<0) return;
if (lg==p[k]) {
--lg;
afisare(k-1);
printf("%d ", v[k]);
} else afisare(k-1);
}
int main () {
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%d", &N);
for (int i=0; i<N; ++i) {
scanf("%d", &v[i]);
chk(i,v[i]);
}
printf("%d\n",lg--);
afisare(N-1);
return 0;
}