Pagini recente » Cod sursa (job #3003324) | Cod sursa (job #1635109) | Cod sursa (job #2582091) | Cod sursa (job #2295421) | Cod sursa (job #268967)
Cod sursa(job #268967)
#include<stdio.h>
#define MAX 100005
long dim,n,V[MAX],P[MAX],L[MAX],SOL[MAX];
long Binary_Search(long x){
long st=1,dr=dim,mj;
while(st<=dr){
mj = (st + dr) >> 1;
if(x <= V[L[mj]]) dr = mj - 1;
else st = mj + 1;
}
return dr;
}
int main(){
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%ld",&n);long i,j;
for(i=1;i<=n;i++) scanf("%ld",V+i);
P[1]=L[1]=dim=0;
for(i=1;i<=n;i++) {
if(V[i] > V[L[dim]]) { L[++dim] = i;P[i]=L[dim-1];}
else {
j = Binary_Search(V[i]);
P[i] = L[j];
if(j == dim || V[i] < V[L[j+1]]){
L[j+1] = i;
dim = dim<j+1?j+1:dim;
}
}
}
printf("%ld\n",dim);
long x = L[dim];
while(x){
SOL[++SOL[0]] = V[x];
x = P[x];
}
for(i=SOL[0];i>=1;i--) printf("%ld ",SOL[i]);
return 0;
}