Pagini recente » Cod sursa (job #3040421) | Cod sursa (job #2722019) | Cod sursa (job #948526) | Cod sursa (job #1922126) | Cod sursa (job #2416329)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#define N 100005
using namespace std;
int n, a[N], e[N];
vector <int> v;
int sol[N];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
v.push_back(0);
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
scanf("%d", &a[i]);
if(a[i]>v.back()){
v.push_back(a[i]);
e[i] = v.size()-1;
}else{
int poz = lower_bound(v.begin()+1,v.end(),a[i]) - v.begin();
v[poz] = a[i];
e[i] = poz;
}
}
int l = n;
int len = v.size()-1;
printf("%d\n", len);
for(int i = len; i > 0; --i){
for(int j = l; j > 0; --j)
if(e[j] == i){
l = j;
sol[i] = a[j];
break;
}
}
for(int i = 1; i <= len; ++i)
cout<<sol[i]<<" ";
return 0;
}