Pagini recente » Cod sursa (job #1996917) | Cod sursa (job #569149) | Cod sursa (job #2197168) | Istoria paginii runda/asdfghjkl | Cod sursa (job #1339147)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
const int MAXN = 100010;
int V[MAXN];
int Best[MAXN], H[MAXN];
int T[MAXN];
void Afisare (int X)
{
if (X){
Afisare (T[X]);
out << V[X]<< " ";
}
}
int main()
{
int N, i;
int L = 0;
int now, step, logN;
in >> N;
for (i = 1; i <= N; i ++)
in >> V[i];
for (logN = 1; logN < N; logN <<= 1);
for (i = 1; i <= N; i ++){
now = 0;
for (step = logN; step; step >>= 1)
if (now + step <= L && V[ H[now + step] ] < V[i])
now += step;
Best[i] = Best[ H[now] ] + 1;
T[i] = H[now];
if (now == L)
H[++ L] = i;
else
if (V[ H[now + 1] ] > V[i])
H[now + 1] = i;
}
out << L << "\n";
for (i = 1; i <= N; i ++)
if (Best[i] == L){
Afisare (i);
return 0;
}
return 0;
}