Pagini recente » Cod sursa (job #2184610) | Cod sursa (job #1779167) | Cod sursa (job #2358515) | Cod sursa (job #1411685) | Cod sursa (job #2576603)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int MAX = 1e5 + 10;
int valpas, n, m, q;
int v[MAX], d[MAX], pred[MAX], ans[MAX];
void lcs()
{
int j = 0, pas;
for(int i = 1; i <= n; ++i)
{
pas = valpas;
for(j = 0; pas; pas >>= 1)
if(j + pas <= m && v[d[j + pas]] < v[i])
j += pas;
if(j == m)
++m;
pred[i] = d[j];
d[j + 1] = i;
}
}
int main()
{
f >> n;
for(int i = 1; i <= n; ++i)
f >> v[i];
for(valpas = 1; valpas <= n; valpas <<= 1);
lcs();
g << m << "\n";
for(int i = d[m]; i >= 1; i = pred[i])
ans[++q] = v[i];
for(int i = m; i >= 1; --i)
g << ans[i] << " ";
return 0;
}