Pagini recente » Cod sursa (job #2961948) | Cod sursa (job #513113)
Cod sursa(job #513113)
#include <stdio.h>
long p[100000],q[100000],v[100000],ind=0,n,ras[100000],loc;
void insert(long nr,long st,long dr)
{
if(st<=dr)
{
long mij=(dr+st)/2;
if(mij==0&&q[0]>nr)
{
q[0]=nr;
loc= 0;
}
else if(q[mij]<=nr&&q[mij+1]>nr)
{
q[mij+1]=nr;
loc= mij+1;
}
else if(q[mij]>nr) insert(nr,st,mij);
else insert(nr,mij+1,dr);
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%ld\n",&n);
for(int i=0;i<n;i++)
{
scanf("%ld",&v[i]);
int x=v[i];
if(i==0)
{
q[0]=x;
p[0]=1;
ind=0;
}
else
{
if(x>q[ind])
{
ind++;
q[ind]=x;
p[i]=ind+1;
}
else
if(x==q[ind])
{
p[i]=p[i-1];
}
else
{
insert(x,0,ind);
p[i]=loc+1;
}
}
}
printf("%ld\n",ind+1);
int c=ind+1;
int c2=ind;
ind=n-1;
while(c>0)
{
if(p[ind]==c)
{
c--;
ras[c]=v[ind];
}
ind--;
}
for(int i=0;i<=c2;i++) printf("%ld ",ras[i]);
return 0;
}