Pagini recente » Cod sursa (job #816841) | Cod sursa (job #1277996) | Cod sursa (job #27874) | Cod sursa (job #649948) | Cod sursa (job #2990637)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> a(100005);
#define INF 10000000
int n;
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
vector<int> dp(n+5);
vector<int> par(n + 5);
vector<int> ind(n + 5);
for (int i = 0; i <= n+4; i++) {
dp[i] = INF;
par[i] = -1;
ind[i] = -1;
}
dp[0] = -INF;
for (int i = 1; i <= n; i++) {
int pos = upper_bound(dp.begin() , dp.begin(), a[i]) - dp.begin();
if (dp[pos - 1] < a[i] && a[i] < dp[pos]) {
ind[pos] = i;
par[i] = ind[pos-1];
dp[pos] = a[i];
}
}
int nr = 0;
for (int i = 1; i <= n; i++) {
if (dp[i] != INF) {
nr = i;
}
}
fout << nr<<'\n';
vector<int> rasp;
int el_ultim = ind[nr];
rasp.push_back(a[el_ultim]);
while (par[el_ultim] != -1) {
el_ultim = par[el_ultim];
rasp.push_back(a[el_ultim]);
}
reverse(rasp.begin(), rasp.end());
for (auto i : rasp) {
fout << i << ' ';
}
cout << '\n';
return 0;
}