Pagini recente » Cod sursa (job #2576137) | Cod sursa (job #2043573) | Cod sursa (job #2518334) | Cod sursa (job #2597215) | Cod sursa (job #212666)
Cod sursa(job #212666)
#include<stdio.h>
#define lg 100005
int n, i, x, d[lg], str[lg], rsp, v[lg], nr, sol[lg], ind, poz;
struct kkt { int x, y; } q[lg];
int caut(int val){
int li = 0, ls = nr, x, gs;
while (li <= ls){
x = (li+ls) / 2;
if (q[x].x < val){
gs = x;
li = x+1;
}
else
ls = x-1;
}
if (gs == nr)
nr ++;
q[gs+1].x = val, q[gs+1].y = i;
return gs+1;
}
int main()
{
freopen("scmax.in", "rt", stdin);
freopen("scmax.out", "wt", stdout);
scanf("%d", &n);
for (i = 1; i <= n; i ++)
scanf("%d", &v[i]);
q[0].x = -2000000000;
for (i = 1; i <= n; i ++){
x = caut(v[i]);
d[i] = x;
str[i] = q[x-1].y;
if (d[i] > rsp){
rsp = d[i];
poz = i;
}
}
printf("%d\n", rsp);
sol[++ ind] = poz;
for (; str[poz] > 0; poz = str[poz])
sol[++ ind] = str[poz];
for (i = ind; i; i --)
printf("%d ", v[sol[i]]);
printf("\n");
return 0;
}