Pagini recente » Cod sursa (job #2808533) | Cod sursa (job #2760923) | Cod sursa (job #1061137) | Cod sursa (job #2861202) | Cod sursa (job #1649942)
#include <iostream>
#include <stdio.h>
using namespace std;
int n,l=1,scmax[100010],parinte[100010],x[100010];
void citire()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d ",&x[i]);
scmax[1]=1;
}
int bin_srch(int k)
{
int st=1;
int dr=l;
while(st<=dr)
{
int mij=(st+dr)/2;
if(k>x[scmax[mij]])
st=mij+1;
else
dr=mij-1;
}
return st;
}
void scm()
{
for(int i=2;i<=n;i++)
{
int poz=bin_srch(x[i]);
scmax[poz]=i;
parinte[i]=scmax[poz-1];
if(poz>l)
l=poz;
}
}
void afis_rec(int k)
{
if(k)
{
afis_rec(parinte[k]);
printf("%d ",x[k]);
}
}
void afisare()
{
int k=scmax[l];
printf("%d\n",l);
afis_rec(k);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
citire();
scm();
afisare();
return 0;
}