Pagini recente » Cod sursa (job #2637367) | Cod sursa (job #2744716) | Cod sursa (job #3186731) | Cod sursa (job #244053) | Cod sursa (job #717255)
Cod sursa(job #717255)
#include <stdio.h>
int n,a[100001],l[100001],best[100001],p[100001],nr;
int caut(int x){
int st=0,sf=nr,m=(st+sf)/2;
while (st<=sf){
if (a[l[m]]<x && a[l[m+1]]>=x)
return m;
if (a[l[m+1]]<x){
st=m+1;
m=(st+sf)/2;
}
else{
sf=m-1;
m=(st+sf)/2;
}
}
return nr;
}
void afis(int x){
if (p[x])
afis(p[x]);
printf("%d ",a[x]);
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int i,poz,max,pm;
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
l[1]=best[1]=1;
nr=1;
for(i=2;i<=n;i++){
poz=caut(a[i]);
best[i]=poz+1;
p[i]=l[poz];
l[poz+1]=i;
printf(" %d %d\n",l[poz+1],poz+1);
if (poz+1>nr)
nr=poz+1;
}
max=best[1];
pm=1;
for (i=2;i<=n;i++)
if (best[i]>max){
max=best[i];
pm=i;
}
printf("%d\n",max);
afis(pm);
printf("\n");
return 0;
}