Pagini recente » Cod sursa (job #1666618) | Cod sursa (job #541665) | Cod sursa (job #1628226) | Cod sursa (job #2828772) | Cod sursa (job #2218078)
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, a, x, maxim, maxi;
vector <int> v;
unordered_map <int, int> nex, init, b;
int main() {
fin >> n;
for (int i = 0; i < n; ++i) {
fin >> a;
x = (lower_bound(v.begin(), v.end(), a) - v.begin());
if (x >= i || v[x] != a) {
v.emplace(v.begin() + x, a);
init[a] = a;
for (int j = x; j >= 0; --j) {
if (b[a] <= b[v[j]]) {
b[a] = b[v[j]] + 1;
nex[v[j]] = a;
init[a] = init[v[j]];
}
}
if (b[a] > maxim) {
maxim = b[a];
maxi = init[a];
}
}
}
fout << maxim << '\n';
fout << maxi << ' ';
while (maxi != nex[maxi]) {
maxi = nex[maxi];
fout << maxi << ' ';
}
}