Pagini recente » Cod sursa (job #1734140) | Cod sursa (job #2510948) | Cod sursa (job #1048010) | Cod sursa (job #18635) | Cod sursa (job #2254319)
#include <fstream>
#include <vector>
#include <algorithm>
#define dim 100002
#define inf 2000000001
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int v[dim], p[dim], q[dim],l, n;
vector <int> ans;
bool cmp(int a, int b)
{
return (a > b);
}
int insereaza(int val, int st, int dr)
{
int mij = (st + dr) / 2;
if (st == dr)
{
if (dr > l)
q[++l + 1] = inf;
q[st] = val;
return st;
}
else
if (val < q[mij])
return insereaza(val, st, mij);
else
if (val > q[mij])
return insereaza(val , mij + 1, dr);
}
int main()
{
in >> n;
for (int i = 1; i <= n; i++)
in >> v[i];
l = 0;
q[1] = inf;
for (int i = 1; i <= n; i++)
p[i] = insereaza(v[i], 1, l + 1);
out << l << '\n';
for (int i = l; i; i--)
{
while (p[n] != i)
n--;
ans.push_back(v[n]);
}
sort(ans.begin(), ans.end(), cmp);
for (int i = l - 1; i >= 0; i--)
out << ans[i] << " ";
return 0;
}