Pagini recente » Cod sursa (job #834556) | Cod sursa (job #123934) | Cod sursa (job #184042) | Cod sursa (job #1283428) | Cod sursa (job #2001197)
#include <bits/stdc++.h>
#define LMAX 100005
using namespace std;
int n,len=1,v[LMAX],Max[LMAX],T[LMAX];
inline int bSearch(int i){
int st=1,dr=len;
while(st<=dr){
int mij=(st+dr)>>1;
if(v[Max[mij]]>=v[i]) dr=mij-1;
else st=mij+1;
}
len=max(st,len);
return st;
}
inline void Afis(int i){
if(T[i]) Afis(T[i]);
printf("%d ",v[i]);
}
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]);
for(int i=1;i<=n+1;++i)
Max[i]=INT_MAX;
Max[1]=1;T[1]=0;
for(int i=2;i<=n;++i){
int poz=bSearch(i);
T[i]=Max[poz-1];
Max[poz]=i;
}
for(int i=1;i<=n+1;++i)
if(Max[i]==INT_MAX){
printf("%d\n",i-1);
Afis(Max[38]);
return 0;
}
}