Pagini recente » Cod sursa (job #1803293) | Cod sursa (job #1912494) | Cod sursa (job #546027) | Cod sursa (job #910436) | Cod sursa (job #246246)
Cod sursa(job #246246)
#include<stdio.h>
int v[100005],n,x[100005],nr,pred[100000];
int find();
int lungime();
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
printf("%d",lungime());
return 0;
}
int find(int val){
int p=1,u=nr,mij;
while(p<u){
mij=(p+u)/2;
if(val<=v[x[mij]])
u=mij;
else
p=mij+1;
}
if(x[p]<val)
return p+1;
return p;
}
int lungime(){
nr=0;
int p;
x[++nr]=1,pred[1]=0;
for(int i=2;i<=n;++i)
if(v[i]>v[x[nr]]){
x[++nr]=i;
pred[i]=x[nr-1];
}
else{
p=find(v[i]);
x[p]=i;
pred[i]=x[p-1];
}
return nr;
}
void refac(int p){
if(p==0)
return;
refac(pred[p]);
printf("%d ",v[p]);
}