Pagini recente » Cod sursa (job #1104192) | Cod sursa (job #93789) | Cod sursa (job #2451645) | Cod sursa (job #2458664) | Cod sursa (job #2279997)
#include <iostream>
#include <algorithm>
#include <cstdio>
#define N 100005
using namespace std;
int n, a[N], b[N], p[N], s[N];
int caut(int x, int st, int dr)
{
if(st==dr)
{
if(b[st]>=x)
return st;
return -1;
}
int mij=(st+dr)/2;
if(b[mij]<x)
return caut(x, mij+1, dr);
return caut(x, st, mij);
}
void citire()
{
scanf("%d\n", &n);
scanf("%d ", &a[1]);
b[++b[0]]=a[1];
p[1]=1;
for(int i=2;i<=n;i++)
{
scanf("%d ", &a[i]);
int poz=caut(a[i], 1, p[i-1]);
if(poz==-1)
{
b[++b[0]]=a[i];
p[i]=b[0];
}
else
{
b[poz]=a[i];
p[i]=poz;
}
}
}
void subsir(int lg, int n)
{
if(lg==0)
return;
if(p[n]==lg)
{
s[++s[0]]=a[n];
subsir(lg-1, n-1);
return;
}
subsir(lg, n-1);
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
citire();
printf("%d\n", b[0]);
subsir(b[0], n);
sort(s+1, s+1+b[0]);
for(int i=1;i<=b[0];i++)
printf("%d ", s[i]);
return 0;
}