Pagini recente » Cod sursa (job #1125472) | Istoria paginii runda/joaca/clasament | Cod sursa (job #2452017) | daupentrumata | Cod sursa (job #898147)
Cod sursa(job #898147)
#include <cstring>
#include <cstdio>
#include <cmath>
int n, m, p;
int a[100001];
int b[100001];
int c[100001];
FILE * in = fopen("scmax.in", "rt");
FILE * out = fopen("scmax.out", "wt");
int main() {
fscanf(in, "%d", &n);
for (int i = 0; i < n; ++i) {
fscanf(in, "%d", &a[i]);
}
for (int i = 0; i < n; ++i) {
p = 0;
while (a[i] > c[p] && p <= m) {
++p;
}
b[i] = p;
c[p] = a[i];
if (m < p) m = p;
}
fprintf(out, "%d\n", m);
int count = m;
int last = b[n - 1] + 1;
for (int i = n - 1; i >= 0; --i) {
if (b[i] == m && a[i] < last) {
last = a[i];
c[m] = a[i];
m = m - 1;
}
}
for (int i = 1; i <= count; ++i) {
fprintf(out, "%d ", c[i]);
}
fclose(in);
fclose(out);
}