Pagini recente » Cod sursa (job #1218972) | Cod sursa (job #2137260) | Cod sursa (job #2500632) | Cod sursa (job #132978) | Cod sursa (job #1650395)
#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) return poz(val,mid+1,dr);
else return poz(val,st,mid);
}
void construct(int lun)
{
int i;
for(i=n;i>0;i--)
if(p[i]==lun)
{
n=i-1;
construct(lun-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;
}