Pagini recente » Cod sursa (job #2549385) | Cod sursa (job #2109304) | Cod sursa (job #1254959) | Cod sursa (job #2434956) | Cod sursa (job #2983615)
#include <bits/stdc++.h>
// #define in cin
// #define out cout
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int nmax = 1e5 + 5e0;
int v[nmax], q[nmax], p[nmax];
int indq;
int insertq(int val)
{
int st = 0, dr = indq;
while (st != dr)
{
int mid = (st + dr) / 2;
if (q[mid] < val)
st = mid + 1;
else
dr = mid;
}
indq += (st == indq);
q[st] = val;
return st;
}
int n;
void solve()
{
in >> n;
for (int i = 0; i < n; i++)
{
in >> v[i];
p[i] = insertq(v[i]);
}
}
void buildSoulution()
{
int toFind = indq - 1;
for (int i = n - 1; i >= 0; i--)
{
if (p[i] == toFind)
{
q[toFind--] = v[i];
}
}
}
void outputSolution()
{
out << indq << '\n';
for (int i = 0; i < indq; i++)
{
out << q[i] << ' ';
}
}
int main()
{
solve();
buildSoulution();
outputSolution();
}