Pagini recente » Cod sursa (job #483520) | Cod sursa (job #2286627) | Cod sursa (job #2866986) | Cod sursa (job #2290526) | Cod sursa (job #1807278)
#include<cstdio>
using namespace std;
int q,u,c[10001],ok,p,k,n,i,ma,j,a[100001],b[100001];
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(i=n;i>=1;i--)
{
ma=0;
for(j=i+1;j<=n;j++)
{
if(a[i]<a[j])
if(b[j]>ma)
ma=b[j];
}
b[i]=ma+1;
}
ma=0;
for(i=1;i<=n;i++)
if(b[i]>ma)
{
ma=b[i];
p=i;
}
printf("%d\n",ma);
k=ma;
ok=1;
while(ok<=ma)
{
for(i=p;i<=n;i++)
if(b[i]==k)
{
printf("%d ",a[i]);
p=i;
k--;
ok++;
break;
}
}
return 0;
}
*/
b[n]=1;
c[1]=a[n];
q=1;
for(i=n-1;i>=1;i--)
{
if(a[i]>c[1])
{
c[1]=a[i];
b[i]=1;
}
else
if(a[i]<c[q])
{
c[q+1]=a[i];
b[i]=q+1;
q++;
}
else
{
p=1;
u=q;
while(p<=u)
{
k=(u+p)/2;
if(a[i]<c[k]&&a[i]>=c[k+1])
{
b[i]=k+1;
c[k]=a[i];
break;
}
else
if(a[i]<c[k]) u=k-1;
else
p=k+1;
}
}
}
printf("%d\n",q);
for(i=q;i>=1;i--)
printf("%d ",c[i]);
return 0;
}