Pagini recente » Cod sursa (job #216509) | Cod sursa (job #1394031) | Cod sursa (job #1338344) | Cod sursa (job #2951222) | Cod sursa (job #318715)
Cod sursa(job #318715)
#include <stdio.h>
#define DIM 100005
int a[DIM],lung[DIM],prec[DIM];
int n,max,poz;
void read ()
{
int i;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
scanf ("%d",&a[i]);
}
void print (int n)
{
if (prec[n])
print (prec[n]);
printf ("%d ",a[n]);
}
int cbin (int st,int dr,int x)
{
int mij;
for ( ; st<=dr; )
{
mij=(st+dr)/2;
if (a[lung[mij]]<a[x] && (a[lung[mij+1]]>=a[x] || mij+1>max))
return mij;
else if (a[lung[mij]]<a[x])
st=mij+1;
else
dr=mij-1;
}
return 0;
}
void solve ()
{
int i,j;
for (i=1; i<=n; ++i)
{
j=cbin (1,max,i);
prec[i]=lung[j];
if (j==max || a[i]<a[lung[j+1]])
{
lung[j+1]=i;
if (j+1>max)
{
max=j+1;
poz=i;
}
}
}
printf ("%d\n",max);
print (poz);
}
int main ()
{
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
read ();
solve ();
return 0;
}