Pagini recente » Cod sursa (job #122034) | Cod sursa (job #1349989) | Cod sursa (job #374056) | Cod sursa (job #1141276) | Cod sursa (job #983313)
Cod sursa(job #983313)
# include <iostream>
# include <fstream>
# include <cmath>
using namespace std;
# define MAXN 100010
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[MAXN], n;
int len[MAXN], maxl;
int prev[MAXN];
int aux[MAXN];
int search(int x)
{
int a = 0, b = maxl, mdl;
while (a <= b) {
mdl = a + ((b - a) >> 1);
if (v[aux[mdl]] < x && x <= v[aux[mdl + 1]]) {
return mdl;
} else if (v[aux[mdl + 1]] < x) {
a = mdl + 1;
} else {
b = mdl - 1;
}
}
return maxl;
}
int main()
{
f >> n;
for (int i = 1; i <= n; i++) {
f >> v[i];
}
maxl = 1;
aux[1] = 1;
len[1] = 1;
for (int i = 2; i <= n; ++i) {
int pos = search(v[i]);
prev[i] = pos;
len[i] = pos + 1;
aux[pos + 1] = i;
maxl = max(maxl, pos + 1);
}
g << maxl << endl;
for (int i = 1; i <= maxl; i++) {
g << v[aux[i]] << ' ';
}
return 0;
}