Pagini recente » Cod sursa (job #2445130) | Cod sursa (job #1600621) | Cod sursa (job #1562884) | Cod sursa (job #473209) | Cod sursa (job #2916239)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
#define EFC cin.tie(nullptr)->ios_base::sync_with_stdio(false)
int d1[5] = { 0, -1, 0, 1, 0 };
int d2[5] = { 0, 0, 1, 0, -1 };
const int mod = 666013;
const int INF = 100000000;
int d11[9] = { 0 , -1, -1, 0, 1, 1, 1, 0, -1 };
int d22[9] = { 0, 0, 1, 1, 1, 0, -1, -1, -1 };
int est[3] = { 0, -1, 0 };
int est1[3] = { 0, 0, 1 };
ifstream fin("scmax.in");
ofstream fout("scmax.out");
//----------------------------------
int n, v[100001], d[100001], nr, maxim, ind;
vector<vector<int>> lene(100001);
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
}
for (int i = 1; i <= n; i++) {
int l = 1, r = nr, p = 0;
while (l <= r) {
int m = (l + r) / 2;
if (d[m] < v[i]) {
r = m - 1;
p = m;
}
else {
l = m + 1;
}
}
if (p == 0) {
d[++nr] = v[i];
lene[nr].push_back(v[i]);
}
else {
d[p] = v[i];
lene[p].push_back(v[i]);
}
}
for (int i = 1; i <= nr; i++) {
if (maxim < lene[i].size()) {
maxim = lene[i].size();
ind = i;
}
}
fout << nr << '\n';
for (auto i : lene[ind]) {
fout << i << " ";
}
}