Pagini recente » Cod sursa (job #2063610) | Cod sursa (job #2555454) | Cod sursa (job #1482438) | Cod sursa (job #1215811) | Cod sursa (job #665111)
Cod sursa(job #665111)
#include<cstdio>
const int MAX_N = 100001 ;
int n, m;
int v[MAX_N];
int aux[MAX_N];
int parinte[MAX_N];
int caut(int x,int st,int dr)
{
int sol=dr+1;
while(st<=dr)
{
int mij = (st+dr)/2;
if(x<=v[aux[mij]])
{
dr=mij-1;
sol=mij;
}
else
st=mij+1;
}
return sol;
}
void Reconst(int pos) {
if (parinte[pos] > 0) {
Reconst(parinte[pos]);
}
printf("%d ", v[pos]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
aux[1]=1;
m = 1;
for(int i=2;i<=n;++i)
{
int x = caut(v[i],1,m);
if (x > m) {
m = x;
}
aux[x]=i;
parinte[i]=aux[x-1];
}
printf("%d\n",m);
Reconst(aux[m]);
return 0;
}