Pagini recente » Cod sursa (job #1034383) | Cod sursa (job #1809721) | Cod sursa (job #1415724) | Cod sursa (job #1887302) | Cod sursa (job #337731)
Cod sursa(job #337731)
#include <stdio.h>
#define Nmax 100003
int l[Nmax],best[Nmax],prev[Nmax],a[Nmax];
int n,nr,poz,max;
void read(){
int i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d",&a[i]);
}
int caut_bin(int st,int dr,int x){
int m;
while(st<=dr){
m=st+(dr-st)/2;
if(a[l[m]] < x && a[l[m+1]]>=x) return m;
if(a[l[m]] < x) st=m+1;
else dr=m-1;
}
return nr;
}
void solve(){
int i;
best[1]=1; l[1]=1;
nr=1;
for(i=2;i<=n;++i){
poz=caut_bin(0,nr,a[i]);
prev[i]=l[poz];
best[i]=poz+1;
l[poz+1]=i;
if(poz+1 > nr) nr=poz+1;
}
max=0;poz=0;
for(i=1;i<=n;++i)
if(best[i] > max) max=best[i], poz=i;
printf("%d\n",max);
}
void write(int poz){
if(prev[poz]>0) write(prev[poz]);
printf("%d ",a[poz]);
}
int main(){
read();
solve();
write(poz);
return 0;
}