Pagini recente » Cod sursa (job #1400523) | Cod sursa (job #1778680) | Cod sursa (job #2255552) | Cod sursa (job #1055534) | Cod sursa (job #183413)
Cod sursa(job #183413)
#include <stdio.h>
const int NMAX=100010;
int v[NMAX],n,S[NMAX],L[NMAX],lS,sol[NMAX],nsol=1;
int caut(int a,int l){
int li=1,ls=l,m;
m=(li+ls)/2;
while (li<ls){
if (S[m]<a) li=m+1,m=(li+ls)/2;
else if (S[m]>a) ls=m-1,m=(li+ls)/2;
else if (S[m]==a) return m;
}
return m;
}
int main(){
int i,poz;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%d",&v[i]);
poz=caut(v[i],lS);
if (S[poz]<v[i]) poz++;
S[poz]=v[i],L[i]=poz;
if (poz>lS) lS=poz;
}
int nmax=lS,v_ant=2000000001;
for (i=n;i>=1;i--)
if (L[i]==nmax && v[i]<v_ant) sol[nsol++]=v[i],nmax--,v_ant=v[i];
printf("%d\n", lS);
for(i=nsol-1;i>=1;i--) printf("%d ",sol[i]);
return 0;
}