Pagini recente » Cod sursa (job #1241669) | Cod sursa (job #446175) | Cod sursa (job #563949) | Cod sursa (job #2482913) | Cod sursa (job #487428)
Cod sursa(job #487428)
#include <stdio.h>
#define DIM 100001
int N, A[DIM], XN, X[DIM], T[DIM], Sol[DIM];
void cit () {
scanf ("%d", &N);
for (int i=1; i<=N; ++i)
scanf ("%d", &A[i]);
}
int cbin (int NR) {
int p=1, u=XN, m;
while (p <= u) {
m = p+(u-p)/2;
if (NR > A[X[m]])
p = m+1;
else
u = m-1;
}
return p;
}
void scm () {
int i, poz;
XN = X[1] = 1;
for (i=2; i<=N; ++i) {
poz = cbin (A[i]);
X[poz] = i;
if (poz > XN) XN = poz;
T[i] = X[poz-1];
}
}
/*void afs () {
int poz = X[X[0]];
printf ("%d\n", X[0]);
for (int i=1; i<=X[0]; ++i) {
Sol[i] = A[poz];
poz = T[poz];
}
for (int i=X[0]; i>0; --i)
printf ("%d ", Sol[i]);
}*/
void afs () {
int poz = X[XN];
do {
Sol[++Sol[0]] = poz;
poz = T[poz];
} while (poz);
printf ("%d\n", Sol[0]);
for (int i=Sol[0]; i>0; --i)
printf ("%d ", A[Sol[i]]);
}
int main () {
freopen ("scmax.in", "r", stdin);
freopen ("scmax.out", "w", stdout);
cit ();
scm ();
afs ();
return 0;
}