Pagini recente » Cod sursa (job #1111151) | Cod sursa (job #2838) | Cod sursa (job #1346893) | Cod sursa (job #1653443) | Cod sursa (job #2215029)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define MAX 1000001
int v[MAX], n, lg[MAX], lgmax;
int pre[MAX];
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = 1; i <= n; i++)
{
int st = 1, dr = lgmax;
while (st <= dr)
{
int mijl = (st + dr) / 2;
if (v[lg[mijl]] < v[i])
st = mijl + 1;
else dr = mijl - 1;
}
if (st>lgmax)
lgmax = st;
lg[st] = i;
pre[i] = lg[dr];
}
vector <int> s;
int poz = lg[lgmax];
fout << lgmax << '\n';
while (poz != 0)
{
s.push_back(v[poz]);
poz = pre[poz];
}
while (!s.empty())
{
fout << s.back() << ' ';
s.pop_back();
}
return 0;
}