Pagini recente » Cod sursa (job #1702105) | Cod sursa (job #184866) | Cod sursa (job #2065895) | Cod sursa (job #3149992) | Cod sursa (job #1609697)
#include <cstdio>
#include <iostream>
#define inf 2000000001
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+1]=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)
{
int i;
for(i=n;i>=1;i--)
if(p[i]==lun)
{
n=i-1;
construct(lun-1);
cout<<v[i]<<' ';
break;
}
}
/*int pozitie(int x,int st,int dr)
{
int mid=(st+dr)/2;
if(st==dr)
{
if(st>len) sol[++len+1]=inf;
sol[st]=x;
return st;
}
else if(x<=sol[mid]) return pozitie(x,st,mid);
else return pozitie(x,mid+1,dr);
}*/
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
cin>>n;
len=0; sol[1]=inf;
int i;
for(i=1;i<=n;i++)
{
cin>>v[i];
p[i]=pozitie(v[i],1,len+1);
}
cout<<len<<'\n';
construct(len);
fclose(stdin);
fclose(stdout);
return 0;
}