Pagini recente » Cod sursa (job #821279) | Monitorul de evaluare | Cod sursa (job #2246721) | Diferente pentru preoni-2007/runda-3/solutii intre reviziile 21 si 53 | Cod sursa (job #176168)
Cod sursa(job #176168)
#include <cstdio>
#define vv 100003
int n, v[vv], best[vv], p[vv], maxim, k, l[vv], nr;
void afisare(int i)
{
if (p[i]>0)
afisare(p[i]);
printf("%d ",v[i]);
}
int caut(int x)
{
int p, u, m;
p=0;
u=nr;
m=(p+u)/2;
while (p<=u)
{
if (v[l[m]]<x && v[l[m+1]]>=x)
return m;
else if (v[l[m+1]]<x)
{
p=m+1;
m=(p+u)/2;
}
else
{
u=m-1;
m=(p+u)/2;
}
}
return nr;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int poz;
nr = 1;
scanf("%d",&n);
for (int i=1; i<=n; i++)
scanf("%d", &v[i]);
best[1]=l[1]=1;
l[0]=0;
for (int i=2; i<=n; i++)
{
poz=caut(v[i]);
p[i]=l[poz];
best[i]=poz + 1;
l[poz+1]=i;
if (nr<poz+1)
nr=poz+1;
}
maxim=0;
poz=0;
for (int i=1; i<=n; i++)
if (maxim<best[i])
{
maxim=best[i];
poz=i;
}
printf("%d\n",maxim);
afisare(poz);
return 0;
}