Pagini recente » newcomers_2 | Cod sursa (job #1801944) | Cod sursa (job #169715) | Cod sursa (job #894043) | Cod sursa (job #2485884)
#include <cstdio>
using namespace std;
int n;
long long a[100005], v[100005], p[100005];
int lv;
int caut_bin(int x, int lg)
{
int i;
for(i=lv; lg!=0; lg>>=1)
if(i - lg >= 0 && v[i-lg] >= x)
i-=lg;
return i;
}
int sol[100005], lg=1;
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
int vm=0;
for(int i=0; i<n; i++)
{
if(i > lg)
lg *= 2;
scanf("%d", &a[i]);
int poz=caut_bin(a[i], lg);
v[poz]=a[i];
if(poz==lv)
lv++;
p[i]=poz;
if(p[i]>p[vm])
vm=i;
}
printf("%d\n", p[vm]+1);
int ant=p[vm], aux=lv-1;
sol[aux--]=a[vm];
for(int i=vm; i>=0 && aux>=0; i--)
{
if(p[i]==ant)
{
sol[ant]=a[i];
ant--;
}
}
for(int i=0; i<=p[vm]; i++)
printf("%d ", sol[i]);
return 0;
}