Pagini recente » Cod sursa (job #1358719) | Cod sursa (job #973629) | Cod sursa (job #448515) | Cod sursa (job #281878) | Cod sursa (job #951652)
Cod sursa(job #951652)
#include <cstdio>
using namespace std;
int lungime,v[100009],poz[100009],nr[100009];
void bs(int x,int i)
{
int med,inc=1,sf=lungime;
while(inc<sf-1)
{
med=(inc+sf)/2;
if(v[med]<x)
{
inc=med;
}
else
{
sf=med;
}
}
v[sf]=x;
poz[i]=sf;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,x,cautat;
lungime=1;
poz[1]=1;
scanf("%d",&n);
scanf("%d",&x);
v[1]=x;
nr[1]=x;
for(i=2;i<=n;i++)
{
scanf("%d",&x);
nr[i]=x;
if(x>v[lungime])
{
lungime++;
v[lungime]=x;
poz[i]=lungime;
}
else
{
if(v[1]>x)
{
v[1]=x;
poz[i]=1;
}
else
{
bs(x,i);
}
}
}
printf("%d\n",lungime);
cautat=lungime;
for(i=n;i>=1;i--)
{
if(poz[i]==cautat)
{
v[cautat]=nr[i];
cautat--;
if(cautat==0)
break;
}
}
for(i=1;i<=lungime;i++)
printf("%d ",v[i]);
return 0;
}