Pagini recente » Cod sursa (job #355457) | Cod sursa (job #71588) | Cod sursa (job #1166072) | Cod sursa (job #2436269) | Cod sursa (job #189138)
Cod sursa(job #189138)
#include<stdio.h>
#define mx(a,b) ((a)>(b)?(a):(b))
#define nmax 100001
int a[nmax],poz[nmax],best[nmax],rebuild[nmax],limit,el;
void finish(int poz)
{
if( rebuild[poz]>0 )
finish( rebuild[poz] );
printf("%d ",a[poz]);
}
inline int max(int a,int b,int poz)
{
if( a>b )
return a;
el=poz;
return b;
}
int search(int val)
{
int start=0,end=limit,mij;
while( start<=end ){
mij=(start+end)/2;
if( a[ poz[mij] ]< val ){
if( a[ poz[mij+1] ]>= val)
return mij;
else
start=mij+1;
}
else
end=mij-1;
}
return limit;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int N,solfin=0;
int i,val;
scanf("%d",&N);
for(i=1; i<=N; ++i)
scanf("%d",&a[i]);
poz[1]=best[1]=1;
for(i=2; i<=N; ++i){
val=search( a[i] );
best[i]=val+1;
rebuild[i]=poz[val];
poz[ val+1 ]=i;
solfin=max(solfin,best[i],i);
limit=mx(limit,val+1);
}
printf("%d\n",solfin);
finish(el);
return 0;
}