Pagini recente » Cod sursa (job #701270) | Cod sursa (job #2427212) | Cod sursa (job #84078) | Cod sursa (job #264142) | Cod sursa (job #1647270)
#include <cstdio>
#include <iostream>
#define nmax 100005
#define inf 2000000010
using namespace std;
int n,v[nmax],p[nmax],sol[nmax],len;
int poz(int val,int st,int dr)
{
int mid=(st+dr)/2;
if(st==dr)
{
if( sol[st]==inf )
{ len++; sol[len+1]=inf; }
sol[st]=val;
return st;
}
else if(sol[mid]<val) poz(val, mid+1,dr);
else poz(val,st,mid);
}
int construct(int l)
{
int i;
for(i=n;i>0;i--)
if(p[i]==l)
{
n=i-1;
construct(l-1);
printf("%d ",v[i]);
break;
}
}
int main()
{
int i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
len=0; sol[1]=inf;
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
p[i]=poz(v[i],1,len+1);
}
printf("%d\n",len);
construct(len);
fclose(stdin);
fclose(stdout);
return 0;
}