Pagini recente » Cod sursa (job #2545358) | Cod sursa (job #1338283) | Cod sursa (job #1373610) | Cod sursa (job #982150) | Cod sursa (job #280325)
Cod sursa(job #280325)
#include <stdio.h>
#define N 100005
int n,v[N],pre[N],s[N],c;
int caut(int x){
int st=1,dr=c,m;
if(v[s[c]]<x) return dr+1;
while(st<dr){
m=(st+dr)/2;
if(v[s[m]]>=x) dr=m;
else st=m+1;
}
if(v[s[st]]<x) st++;
return st;
}
void afiseaza(int x){
if(pre[x]>0)
afiseaza(pre[x]);
printf("%d ",v[x]);
}
int main(){
int i,x,max=0,imax;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
// s[1]=1;
for(i=1;i<=n;i++){
x=caut(v[i]);
pre[i]=s[x-1];
s[x]=i;
if(x>c) c++;
if(x>max){
max=x;
imax=i;
}
}
printf("%d\n",max);
afiseaza(imax);
return 0;
}