Pagini recente » Cod sursa (job #2291949) | Cod sursa (job #389742) | Cod sursa (job #1597585) | Cod sursa (job #378436) | Cod sursa (job #2684450)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, a[100001], dp[100001], r[100001], p[100001], lma, st, dr, mij, poz, k, pozma;
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> a[i];
dp[++lma] = a[1]; p[1] = 1;
for (int i = 2; i <= n; i++) {
if (a[i] > dp[lma]) {
dp[++lma] = a[i];
p[i] = lma;
}
else {
st = 1; dr = lma; poz = lma + 1;
while (st <= dr) {
mij = st + (dr - st) / 2;
if (dp[mij] >= a[i]) {
poz = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
dp[poz] = a[i];
p[i] = poz;
}
}
fout << lma << '\n';
for (int i = n; i >= 1; i--)
if (p[i] == lma) {
pozma = i;
r[++k] = a[i];
break;
}
for (int i = pozma - 1; i >= 1; i--)
if (p[i] == p[pozma] - 1 and a[pozma] > a[i]) {
pozma = i;
r[++k] = a[i];
}
for (int i = lma; i >= 1; i--)
fout << r[i] << ' ';
return 0;
}