Pagini recente » Cod sursa (job #2179729) | Cod sursa (job #1978918) | Cod sursa (job #1410155) | Cod sursa (job #873697) | Cod sursa (job #1075144)
#include <cstdio>
using namespace std;
int stiv[100069],poz[100069],a[100069],u[100069];
int i,m,n,k;
int cautbin (int x,int m,int stiv[])
{
int st,dr,POZ,mij;
st=1;
dr=m;
POZ=0;
while (st<=dr && POZ==0)
{
mij=(st+dr)/2;
if (stiv[mij]==x) POZ=mij;
else if (stiv[mij]<x) st=mij+1;
else dr=mij-1;
}
if (POZ==0) return st;
return POZ;
}
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]);
stiv[1]=a[1];
poz[1]=1;
m=1;
for (i=2; i<=n; i++)
{
poz[i]=cautbin(a[i],m,stiv);
stiv[poz[i]]=a[i];
if(poz[i]>m) m++;
}
for (i=n; i>=1; i--)
if (poz[i]==m)
{
u[++k]=a[i];
m--;
}
printf("%d\n", k);
for (i=k; i>=1; i--) printf("%d ",u[i]);
return 0;
}