Pagini recente » Cod sursa (job #636855) | Cod sursa (job #2950507) | Cod sursa (job #2060997) | Cod sursa (job #2420621) | Cod sursa (job #2863517)
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define dbg(x) cout << #x <<": " << x << "\n";
using ll = long long;
const string myf = "scmax";
ifstream fin(myf + ".in");
ofstream fout(myf + ".out");
int n;
int a[100005], lis[100005], ord[100005], ind[100005];
int main() {
int k = 0;
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> a[i];
lis[++k] = a[1];
ord[1] = 1;
for (int i = 2; i <= n; ++i) {
if (a[i] >= lis[k])lis[++k] = a[i], ord[i] = k;
else {
int poz = lower_bound(lis + 1, lis + k + 1, a[i]) - lis;
lis[poz] = a[i];
ord[i] = poz;
}
}
fout << k << '\n';
int j = n;
for (int i = k; i >= 1; --i) {
while (ord[j] != i)
--j;
ind[i] = j;
}
for (int i = 1; i <= k; ++i)
fout << a[ind[i]] << " ";
fin.close();
fout.close();
return 0;
}