Pagini recente » Cod sursa (job #349725) | Cod sursa (job #1296559) | Cod sursa (job #2037961) | Cod sursa (job #1548464) | Cod sursa (job #2684247)
#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;
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';
int j = n;
for (int i = lma; i >= 1; i--) {
while (p[j] != i)
j--;
r[i] = a[j];
}
for (int i = 1; i <= lma; i++)
fout << r[i] << ' ';
return 0;
}