Pagini recente » Cod sursa (job #129703) | Cod sursa (job #2940932) | Cod sursa (job #1838593) | Cod sursa (job #362868) | Cod sursa (job #1609672)
#include <cstdio>
#include <stack>
#include <iostream>
#include <vector>
#define inf 0x3fffffff
using namespace std;
int n, v[100010],p[100010],len;
int sol[100010];
int pozitie(int val,int st,int dr)
{
int mid=(st+dr)/2;
if(st==dr)
{
if(sol[st]==inf) len++; sol[len]=inf;
sol[st]=val;
return st;
}
else if(sol[mid]<val) pozitie(val,mid+1,dr);
else pozitie(val,st,mid);
}
int construct(int lun)
{
for(int i=n;i>=1;i--)
if(p[i]==lun)
{
construct(lun-1);
cout<<v[i]<<' ';
break;
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
cin>>n;
len=1;
sol[2]=inf; sol[1]=inf;
int i;
for(i=1;i<=n;i++)
{
cin>>v[i];
p[i]=pozitie(v[i],1,len);
}
len--;
cout<<len<<'\n';
construct(len);
fclose(stdin);
fclose(stdout);
return 0;
}