Pagini recente » Cod sursa (job #2476438) | Cod sursa (job #678497) | Cod sursa (job #1606220) | Cod sursa (job #467374) | Cod sursa (job #198924)
Cod sursa(job #198924)
# include <stdio.h>
using namespace std;
# define FIN "scmax.in"
# define FOUT "scmax.out"
# define MAXN 100001
int N,i,L,poz,p;
int v[MAXN];
int pred[MAXN];
int M[MAXN];
int Best[MAXN];
int search(int x,int st,int dr)
{
int mij,poz=0;
while (st <= dr)
{
mij = (st+dr) >> 1;
if (v[M[mij]] < x)
{
poz = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return poz;
}
void write(int p)
{
if (pred[p] != 0) write(pred[p]);
printf("%d ",v[p]);
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d",&N);
for (i = 1; i <= N; ++i)
scanf("%d",&v[i]);
L = 1;
M[1] = 1;
Best[1] = 1;
p = 1;
for (i = 2; i <= N; ++i)
{
poz = search(v[i],0,L);
Best[i] = poz + 1;
M[poz + 1] = i;
pred[i] = M[poz];
if (L < poz + 1) L = poz + 1, p =i;;
}
printf("%d\n",L);
write(p);
return 0;
}