Pagini recente » Cod sursa (job #682506) | Cod sursa (job #1967095) | Cod sursa (job #2440433) | Cod sursa (job #425433) | Cod sursa (job #2373574)
#include <bits/stdc++.h>
using namespace std;
#define LMAX 100005
int v[LMAX];
int len,poz[LMAX],T[LMAX];
int B_Search(int i){
int st=1,dr=len;
while(st<=dr){
int mij=(st+dr)/2;
if(v[poz[mij]]<v[i])
st=mij+1;
else dr=mij-1;
}
len=max(len,st);
return st;
}
void write(int poz){
if(poz==0)
return ;
write(T[poz]);
printf("%d ",v[poz]);
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
poz[len=1]=1;
for(int i=2;i<=n;++i){
int ind=B_Search(i);
T[i]=poz[ind-1];
poz[ind]=i;
}
printf("%d\n",len);
write(poz[len]);
return 0;
}