Pagini recente » Cod sursa (job #1174004) | Cod sursa (job #2031409) | Cod sursa (job #2667323) | Cod sursa (job #2061755) | Cod sursa (job #1751217)
#include <stdio.h>
#define NMAX 100005
int smax, pmax, a[NMAX], v[NMAX], pos[NMAX], pred[NMAX], n;
int bsearch(int x)
{
int N=1, i;
while(N<=smax) N<<=1;
for(i=0;i<=smax && N;N>>=1)
if(i+N<=smax && x>v[i+N])
i+=N;
return i;
}
void afis(int i)
{
if (i==0) return;
afis(pred[i]);
printf("%d ", a[i]);
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i=1; i<=n; ++i)
scanf("%d", &a[i]);
int p = 0;
v[1] = a[1];
pos[1] = 1;
smax = 1;
pmax = 1;
for(int i=2; i<=n; ++i)
{
p = bsearch(a[i]);
v[p+1] = a[i];
pos[p+1] = i;
pred[i] = pos[p];
if(p+1>smax)
smax = p+1, pmax = i;
}
printf("%d\n", smax);
afis(pmax);
return 0;
}