Pagini recente » Cod sursa (job #2764217) | Cod sursa (job #887531) | Cod sursa (job #2199828) | Cod sursa (job #2535754) | Cod sursa (job #2990633)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> dp(100005);
vector<int> a(100005);
vector<int> par(100005);
vector<int> ind(100005);
#define INF 10000000
int n;
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
for (int i = 0; i <= n; i++) {
dp[i] = INF;
par[i] = -1;
ind[i] = -1;
}
dp[0] = -INF;
int nr = 0;
for (int i = 1; i <= n; i++) {
int pos = upper_bound(dp.begin()+1 , dp.begin()+1+nr, a[i]) - dp.begin();
if (dp[pos - 1] < a[i] && a[i] < dp[pos]) {
if (dp[pos] == INF) {
nr++;
}
else {
}
ind[pos] = i;
par[i] = ind[pos-1];
dp[pos] = a[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 << ' ';
}
return 0;
}