Pagini recente » Cod sursa (job #3274857) | Cod sursa (job #539856) | Cod sursa (job #2848440) | Cod sursa (job #1541264) | Cod sursa (job #2755746)
#include <fstream>
#include <algorithm>
#define DIM 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
int v[DIM], Sol[DIM], dp[DIM], t[DIM];
int main() {
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> v[i];
int l = 0;
for (int i = 1; i <= n; ++i) {
int st = 1, dr = l, val = v[i];
bool ok = true;
while (st <= dr) {
int mid = (st + dr) / 2;
if (v[dp[mid]] == val) {
ok = false;
break;
}
if (v[dp[mid]] < val)
st = mid + 1;
else
dr = mid - 1;
}
if (!ok)
continue;
if (st == l + 1) {
dp[++l] = i;
t[i] = dp[l - 1];
}
else
if (st == 1) {
dp[1] = i;
t[i] = 0;
}
else {
dp[st] = i;
t[i] = dp[st - 1];
}
}
fout << l << '\n';
int sol = 0;
for (int i = dp[l]; i; i = t[i])
Sol[++sol] = v[i];
for (int i = sol; i; --i)
fout << Sol[i] << ' ';
return 0;
}