Pagini recente » Cod sursa (job #365056) | Cod sursa (job #176819) | Cod sursa (job #1318345) | Cod sursa (job #1574377) | Cod sursa (job #175500)
Cod sursa(job #175500)
#include<stdio.h>
long n,i,x[100001],poz[100001],vm[100001],dad[100001],st,dr,mi,lmax;
void afis(long pc);
int main()
{
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)scanf("%ld",&x[i]);
lmax=1;poz[1]=1;vm[1]=x[1];
for(i=2;i<=n;i++)
{ if(x[i]>vm[lmax])
{ lmax++;poz[lmax]=i;vm[lmax]=x[i];dad[i]=poz[lmax-1];continue;}
if(x[i]<=vm[1])
{ poz[1]=i;vm[1]=x[i];dad[i]=0;continue;}
st=1;dr=lmax;
while(dr-st>1)
{ mi=(st+dr)/2;
if(vm[mi]<x[i])st=mi;
else dr=mi;
}
if(x[i]<vm[dr])
{ poz[dr]=i;vm[dr]=x[i];dad[i]=dad[dr];}
}
printf("%ld\n",lmax);
afis(poz[lmax]);
fcloseall();
return 0;
}
void afis(long pc)
{
if(!pc)return;
afis(dad[pc]);
printf("%ld ",x[pc]);
}