Pagini recente » Cod sursa (job #3150399) | Cod sursa (job #2969845) | Cod sursa (job #1281294) | Cod sursa (job #3208201) | Cod sursa (job #1238175)
#include <cstdio>
#define max_n 100020
#define maxval 2000000020
#include <stack>
using namespace std;
int n,a[max_n],p[max_n],m[max_n];
stack <int> q;
int main(void){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int i=0,l=0;
for(i = 0;i<n;i++){
scanf("%d", &a[i]);
int fl=1,ll=l,md;
while(fl<=ll){
md=fl+(ll-fl)/2;
if(a[m[md]]<a[i])
fl=md+1;
else
ll=md-1;
}
int nl=fl;
p[i]=m[fl-1];
if(nl>l){
l=nl;
m[nl]=i;
}
else if(a[i]<a[m[nl]])
m[nl]=i;
}
printf("%d\n",l);
int k=m[l];
for(i=l-1;i>=0;--i){
q.push(a[k]);
k=p[k];
}
while(!q.empty()){
printf("%d ",q.top());
q.pop();
}
}