Pagini recente » Cod sursa (job #795565) | Cod sursa (job #1332734) | Cod sursa (job #1302621) | Cod sursa (job #2738817) | Cod sursa (job #228305)
Cod sursa(job #228305)
#include <stdio.h>
#define NMAX 100000
int n,max;
int a[NMAX],prec[NMAX],d[NMAX],poz[NMAX];
int binary_search(int x)
{
int ls=1,ld=max,mij;
while (ls<=ld)
{
mij=ls+(ld-ls)/2;
if (mij==0)
mij=1;
if (d[mij-1]<x && x<=d[mij]) return mij;
else
if (d[mij]<x)
ls=mij+1;
else
if (x<=d[mij-1])
ld=mij-1;
}
return max+1;
}
int main()
{
int i,q,x;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for (i=1;i<=n; ++i)
{
scanf("%d", a[i]);
q=binary_search(a[i]);
if (q>max)
++max;
d[q]=a[i];
poz[q]=i;
prec[i]=poz[q-1];
}
printf("%d\n", max);
x=poz[max];
for (i=max;i>0;--i)
{
d[i]=a[x];
x=prec[x];
}
for (i=1;i<=max;++i)
printf("%d ", d[i]);
}