Pagini recente » Cod sursa (job #2179919) | Cod sursa (job #1608269) | Cod sursa (job #1094122) | Cod sursa (job #1091291) | Cod sursa (job #2296492)
#include <bits/stdc++.h>
using namespace std;
int const NMAX=1e5+10;
int v[NMAX], dp[NMAX], last[NMAX];
int main(){
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n;
int lmax=0;
cin >> n;
for (int i=1; i<=n; i++){
cin >> v[i];
if (v[i]>last[lmax]){
last[++lmax]=v[i];
dp[i]=lmax;
continue;
}
int poz=(int)(lower_bound(last, last+lmax+1, v[i])-last);
dp[i]=poz;
if (last[poz]>v[i]) last[poz]=v[i];
}
cout << lmax << '\n';
vector<int> ans;
for (int target=lmax, i=n; i>=1; i--)
if (dp[i]==target) ans.push_back(v[i]), --target;
reverse(ans.begin(), ans.end());
for (auto x: ans) cout << x << ' ';
}