Pagini recente » Istoria paginii utilizator/anamaria777 | Cod sursa (job #2285551) | Cod sursa (job #1371614)
#include <cstdio>
#define NMAX 100005
using namespace std;
int n;
int v[NMAX],sol[NMAX],L[NMAX];
int st,dr,poz,k;
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]);
sol[1]=v[1];k=1;L[1]=1;
for(int i = 2; i <= n; ++i)
{
if (v[i] > sol[k]) {++k;sol[k]=v[i];L[i]=k;}
else
{
st=1;dr=k;poz=dr;
while(st <= dr)
{
int mij=(st+dr)/2;
if (sol[mij] < v[i]) st=mij+1;
else {dr=mij-1;poz=mij;}
}
sol[poz]=v[i];
L[i]=poz;
}
}
printf("%d\n",k);
int j = 0;
for (int i=n; i>0 && k;--i)
if (L[i]==k) sol[++j]=v[i],--k;
for (int i=j;i>0;--i)
printf("%d ",sol[i]);
return 0;
}