Pagini recente » Cod sursa (job #885422) | Cod sursa (job #375778) | Cod sursa (job #2724162) | Cod sursa (job #1634860) | Cod sursa (job #2633926)
#include <bits/stdc++.h>
using namespace std;
const int mxN=1e5+3;
int v[mxN], p[mxN], l[mxN], best[mxN];
int n, k, poz, nr, lung;
int cbin(int x){
int lb=0, rb=nr;
while(lb<=rb){
int mb=(lb+rb)/2;
if(v[l[mb]]<x&&v[l[mb+1]]<=x)
return mb;
else if(v[l[mb+1]]<x)
lb=mb+1;
else rb=mb-1;
}
return nr;
}
int main(){
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin >> n;
for(int i=1; i<=n; ++i)
cin >> v[i];
best[1]=l[1]=1, l[0]=0; nr=1;
for(int i=2; i<=n; ++i){
poz=cbin(v[i]);
p[i]=l[poz];
best[i]=poz+1;
l[poz+1]=i;
if(nr<poz+1) nr=poz+1;
}
lung = 0, poz = 0;
for(int i=1; i<=n; ++i)
if(lung<best[i])
lung=best[i], poz=i;
cout<<lung<<'\n';
for(int i=poz; i<=n; ++i)
if(p[i]>0)
cout << v[i] << ' ';
}