Pagini recente » Cod sursa (job #2810675) | Statistici Craciun (ClaudiuCraciun) | Cod sursa (job #1264966) | Cod sursa (job #1884351) | Cod sursa (job #2001221)
#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;
for(int i=2;i<=n;++i){
int poz=bSearch(i);
T[i]=Max[poz-1];
Max[poz]=i;
}
printf("%d\n",len);
Afis(Max[len]);
}