Cod sursa(job #520495)
#include <fstream>
#include <vector>
#define NMax 100000
using namespace std;
int N, M;
int V[NMax], S[NMax], P[NMax];
void read()
{
int i;
ifstream fin("scmax.in");
fin >> N;
for (i = 0; i < N; ++i)
fin >> V[i];
fin.close();
}
void solve()
{
int i, j;
for (i = 0; i < N; ++i)
{
P[i] = -1;
for (j = i - 1; j >= 0; --j)
if (V[j] < V[i] && S[j] > S[i])
{
S[i] = S[j];
P[i] = j;
}
S[i]++;
}
}
void back(ofstream &fout, const int x)
{
if (x == -1)
return;
back(fout, P[x]);
fout << V[x] << ' ';
}
void write()
{
int i, x;
ofstream fout("scmax.out");
for (i = 0; i < N; ++i)
if (S[i] > M)
{
M = S[i];
x = i;
}
fout << M << '\n';
back(fout, x);
fout.close();
}
int main()
{
read();
solve();
write();
return 0;
}