Pagini recente » Cod sursa (job #2270415) | Cod sursa (job #1709626) | Cod sursa (job #2640838) | Cod sursa (job #3175010) | Cod sursa (job #1274113)
#include<stdio.h>
const int nmax=1000000;
const int inf=2000000000;
int minim[nmax+1],v[nmax+1],t[nmax+1],minpoz[nmax+1];
inline int cautb(int x)
{
int st=0,dr=nmax,med;
while(st<=dr)
{
med=(st+dr)>>1;
if(minim[med]>=x)
dr=med-1;
else
st=med+1;
}
return st;
}
void afis(int poz)
{
if(t[poz]!=0)
afis(t[poz]);
printf("%d ",v[poz]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n;
scanf("%d",&n);
int i;
for(i=1;i<=nmax;++i)
minim[i]=inf;
int x,lmax=0,pmax;
for(i=1;i<=n;++i)
{
scanf("%d",&v[i]);
int poz=cautb(v[i]);
t[i]=minpoz[poz-1];
minim[poz]=v[i];
minpoz[poz]=i;
if(poz>lmax)
{
lmax=poz;
pmax=i;
}
}
printf("%d\n",lmax);
afis(pmax);
}