Pagini recente » Cod sursa (job #2651219) | Cod sursa (job #239505) | Cod sursa (job #2696304) | Istoria paginii runda/racovita_mini_vacanta_10/clasament | Cod sursa (job #920370)
Cod sursa(job #920370)
#include <iostream>
#include <cstdio>
using namespace std;
int a[100100],p[100100],pr[100100],n,i,j,lmax,ST,DR,mi;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(ST=0,DR=lmax+1;DR-ST-1;)
{
mi=(ST+DR)/2;
if(a[p[mi]]<a[i]) ST=mi;
else DR=mi;
}
if(DR==lmax+1){
lmax++;
p[lmax]=i;
pr[i]=p[lmax-1];
continue;
}
if(a[i]<a[p[DR]])
{
p[DR]=i;
pr[i]=p[ST];
}
}
printf("%d\n",lmax);
for(i=lmax,j=p[lmax];i>0;j=pr[j],i--)
{
p[i]=a[j];
}
for(i=1;i<=lmax;i++)
printf("%d ",p[i]);
return 0;
}