Pagini recente » Cod sursa (job #2524006) | Cod sursa (job #1492673) | Cod sursa (job #2577354) | Cod sursa (job #1156577) | Cod sursa (job #185903)
Cod sursa(job #185903)
#include <iostream>
#define FIN "scmax.in"
#define FOUT "scmax.out"
#define MAX_N 100010
using namespace std;
int target,v[MAX_N],n,lmax[MAX_N],a[MAX_N],solution[MAX_N];
void cbin(int p,int u,int vl){
if (p<=u){
int m=(p+u)/2;
if (v[m]>=vl){
target=m;
cbin(p,m-1,vl);
} else cbin(m+1,u,vl);
}
return ;
}
int main(void){
freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);
cin>>n;
int len=0,x;
for (int i=1;i<=n;++i){
cin>>x;
target=len+1;
cbin(1,len,x);
v[target]=x;
if (target>len)++len;
lmax[i]=target;
a[i]=x;
}
cout<<len<<"\n";
int lastvalue=2000000001;
int cpos=n;
for (int i=len;i>=1;--i){
while (lmax[cpos]!=i || a[cpos]>=lastvalue){--cpos;}
solution[i]=a[cpos];
}
for (int i=1;i<len;++i)printf("%d ",solution[i]);
cout<<solution[len]<<"\n";
fclose(stdin);
fclose(stdout);
return 0;
}