Pagini recente » Cod sursa (job #1342647) | Cod sursa (job #1991514) | Cod sursa (job #2247141) | Cod sursa (job #1244543) | Cod sursa (job #2013994)
#include <bits/stdc++.h>
#define NN 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N, best, start, lengthM, End, M[NN];
vector<int> father, a;
void ReadData()
{
fin >> N;
a.resize(N + 1); father.resize(N + 1, 0);
for (int i = 1; i <= N; ++i)
fin >> a[i];
}
void Solve()
{
int Pow, answ;
for (int i = 1; i <= N; ++i)
{
Pow = 1; answ = 0;
for (; (Pow << 1) <= lengthM; Pow <<= 1);
for (int step = Pow; step; step >>= 1)
if (answ + step <= lengthM && a[M[answ + step]] < a[i])
answ += step;
father[i] = M[answ];
if (answ == lengthM)
M[++lengthM] = i, End = i;
else
M[answ + 1] = i;
}
}
void writeSol(int nod)
{
if (father[nod])
writeSol(father[nod]);
fout << a[nod] << " ";
}
int main()
{
ReadData();
Solve();
fout << lengthM << "\n";
writeSol(End);
return 0;
}