Pagini recente » Cod sursa (job #889124) | Cod sursa (job #1447718) | Cod sursa (job #2147137) | Cod sursa (job #2824045) | Cod sursa (job #602227)
Cod sursa(job #602227)
#include <stdio.h>
long n, a[100001], os[100001], minPosL[100001], L;
void Binarizal(long e, long v, long i, long *j)
{
long k;
*j = 0;
while (e<=v)
{
k = (e+v)/2;
if (a[minPosL[k]]<a[i])
{
*j = k;
e = k+1;
}
else v = k-1;
}
}
void Megold()
{
L = 0;
long j = 0, i;
for (i=1; i<=n; i++)
{
Binarizal(1, L, i, &j);
os[i] = minPosL[j];
if (j==L || a[i] < a[minPosL[j+1]])
{
minPosL[j+1] = i;
L = (L<j+1)?(j+1):L;
}
}
}
void Kiir(int k)
{
if (k==0) return;
Kiir(os[k]);
printf("%ld ", a[k]);
}
int main()
{
long i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%ld", &n);
for (i=1; i<=n; i++)
scanf("%ld", a+i);
Megold();
printf("%ld\n", L);
Kiir(minPosL[L]);
return 0;
}