Pagini recente » Cod sursa (job #3352732) | Cod sursa (job #1301696) | Cod sursa (job #1996822) | Cod sursa (job #412850) | Cod sursa (job #3352708)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
f >> n;
vector<long long> a(n);
for (int i = 0; i < n; i++) f >> a[i];
vector<long long> t;
vector<int> p, pr(n, -1), id;
for (int i = 0; i < n; i++) {
long long x = a[i];
int l = 0, r = t.size();
while (l < r) {
int m = (l + r) / 2;
if (t[m] < x) l = m + 1;
else r = m;
}
if (l == (int)t.size()) {
t.push_back(x);
p.push_back(i);
} else {
t[l] = x;
p[l] = i;
}
id.push_back(l);
if (l) pr[i] = p[l - 1];
}
int k = t.size();
g << k << "\n";
vector<long long> v(k);
int c = p[k - 1];
for (int i = k - 1; i >= 0; i--) {
v[i] = a[c];
c = pr[c];
}
for (auto x : v) g << x << " ";
return 0;
}