Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/alexc23 | Istoria paginii utilizator/icehero | Istoria paginii utilizator/denismana | Cod sursa (job #1655276)
#include <stdio.h>
#define N_MX 100001
int V[N_MX],Q[N_MX],P[N_MX];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,j,st,dr,mij,nr,poz,k = 0;
scanf("%d",&n);
for(i = 1; i <= n; ++i)
{
scanf("%d",&nr);
V[i] = nr;
st = 1;
dr = k ;
poz = -1;
while(st <= dr)
{
mij = (st + dr) / 2;
if(Q[mij] < nr)
{
st = mij + 1;
}
else{
dr = mij - 1;
poz = mij;
}
}
if(poz == -1)
{
Q[++k] = nr;
P[i] = k;
}
else
{
Q[poz] = nr;
P[i] = poz;
}
}
st = 0;
dr = k;
printf("%d\n",k);
for(i = n ; i >= 1 && k; --i)
{
if(P[i] == k)
{
Q[i] = V[P[i]];
--k;
}
}
printf("%d",Q[1]);
for(i = 2; i <= dr; ++i)
printf(" %d",Q[i]);
printf("\n");
return 0;
}