Pagini recente » Cod sursa (job #535549) | Cod sursa (job #447064) | Cod sursa (job #162031) | Cod sursa (job #2914951) | Cod sursa (job #268964)
Cod sursa(job #268964)
#include<stdio.h>
#define MAX 100001
long dim,n,V[MAX],P[MAX],L[MAX],SOL[MAX];
long Binary_Search(long x){
long st=1,dr=dim,mj,poz=0;
while(st<=dr){
mj = (st + dr) >> 1;
if(x < V[L[mj]]) {poz = mj -1 ; dr = mj - 1; }
if(x > V[L[mj]]) st = mj + 1;
}
return poz;
}
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=1;
for(i=2;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;
}