Pagini recente » Cod sursa (job #2964029) | Cod sursa (job #1903139) | Cod sursa (job #1754067) | Cod sursa (job #868212) | Cod sursa (job #2812343)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
int DP[100005], X[100005];
int Max;
int tt[100005];
void Read()
{
fin >> n;
for(int i = 1; i <= n; i ++)
fin >> X[i];
}
void Solve()
{
DP[n] = 1;
tt[n] = 0;
for(int i = n - 1; i >= 1; i --)
{
int max = 0;
for(int j = i + 1; j <= n && X[j] > X[i]; j ++)
if(DP[j] > max)
{
max = DP[j];
tt[i] = j;
}
DP[i] = max + 1;
}
}
void Print()
{
Max = 0;
int r;
for(int i = 1; i <= n; i ++)
if(DP[i] > Max)
{
Max = DP[i];
r = i;
}
fout << Max << '\n';
int k = r;
while(k)
{
fout << X[k] << " ";
k = tt[k];
}
}
int main()
{
Read();
Solve();
Print();
}