Pagini recente » Cod sursa (job #2923434) | Cod sursa (job #2502916) | Cod sursa (job #203304) | Cod sursa (job #2658485) | Cod sursa (job #1649822)
#include <iostream>
#include <stdio.h>
using namespace std;
int n, a[100005], L[100005], r[100005], nr, t[100005], mxi;
int cauta(int x)
{
int p, m, u;
p=0;
u=nr;
while(p<=u)
{
m=(u+p)/2;
if(a[L[m]]<x&&a[L[m+1]]>=x)
{
return m;
}
else
if(a[L[m+1]]<x)
p=m+1;
else
if(a[L[m]]>=x)
u=m-1;
}
return nr;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
L[1]=1;
nr=1;
mxi=1;
for(int i=2;i<=n;i++)
{
int lung=cauta(a[i]);
L[lung+1]=i;
t[i]=L[lung];
if(lung+1>nr)
{
nr=lung+1;
mxi=i;
}
}
printf("%d\n",nr);
int i=mxi, in=0;
while(i)
{
in++;
r[in]=a[i];
i=t[i];
}
while(in)
{
printf("%d ",r[in]);
in--;
}
return 0;
}