Pagini recente » Cod sursa (job #3314929) | Cod sursa (job #2854749) | Cod sursa (job #588310) | Cod sursa (job #1428482) | Cod sursa (job #1330243)
#include <fstream>
#define NMax 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[NMax], i, l, mid, r, stack[NMax], rec[NMax], ini[NMax], ind, lscm;
int main()
{
f >> n;
for (i = 1; i <= n; i++)
f >> v[i];
for (i = 1; i <= n; i++) {
l = 1;
r = lscm;
while (l <= r) {
mid = (l + r) / 2;
if (stack[mid] < v[i])
l = mid + 1;
else {
r = mid - 1;
ind = mid;
}
}
if (v[i] > stack[lscm]) {
stack[++lscm] = v[i];
rec[i] = lscm;
}
else {
stack[ind] = v[i];
rec[i] = ind;
}
}
g << lscm << "\n";
int len = lscm;
for (i = n; i >= 1; i--) {
if (rec[i] == len)
ini[len--] = v[i];
}
for (i = 1; i <= lscm; i++)
g << ini[i] << " ";
}