Pagini recente » Cod sursa (job #222934) | Cod sursa (job #1139708) | Cod sursa (job #1533955) | Cod sursa (job #267015) | Cod sursa (job #752066)
Cod sursa(job #752066)
#include<stdio.h>
#define MAX 100005
long dim,n,V[MAX],P[MAX],L[MAX],SOL[MAX];
long Binary_Search(long x)
{
long st=1,dr=dim,mj;
while(st<=dr)
{
mj = (st + dr) >> 1;
if(x <= V[L[mj]]) dr = mj - 1;
else st = mj + 1;
}
return dr;
}
int main()
{
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%ld",&n);long i,j;
for(i=1;i<=n;i++) scanf("%ld",V+i);
P[1]=L[1]=dim=0;
for(i=1;i<=n;i++)
{
if(V[i] > V[L[dim]]) { L[++dim] = i;P[i]=L[dim-1];}
else
{
j = Binary_Search(V[i]);
P[i] = L[j];
if(j == dim || V[i] < V[L[j+1]])
{
L[j+1] = i;
dim = dim<j+1?j+1:dim;
}
}
}
printf("%ld\n",dim);
long x = L[dim];
while(x)
{
SOL[++SOL[0]] = V[x];
x = P[x];
}
for(i=SOL[0];i>=1;i--) printf("%ld ",SOL[i]);
return 0;
}