Pagini recente » Borderou de evaluare (job #1074215) | Cod sursa (job #2147663) | Cod sursa (job #1065862) | Cod sursa (job #344993) | Cod sursa (job #3354901)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int NMAX = 1e5;
int n, v[NMAX+2];
int lung[NMAX+2], pmax, sol[NMAX+2], cnt;
int main()
{
in>>n;
for (int i=1; i<=n; i++)
{
in>>v[i];
}
for (int i=1; i<=n; i++)
{
int lung_i = 0;
for (int j=1; j<i; j++)
{
if (v[j]<v[i])
{
if (lung[j]>lung_i)
{
lung_i = lung[j];
}
}
}
lung[i] = lung_i + 1;
//lung_pmax = max(lung_pmax, lung[i]);
if (lung[i] > lung[pmax])
{
pmax = i;
}
}
//out<<lung[pmax]<<endl;
int ant = v[pmax] + 1;
for (int i=n; i>=1; i--)
{
if (lung[pmax] == lung[i] && ant > v[i])
{
cnt++;
sol[cnt] = v[i];
ant = v[i];
lung[pmax]--;
}
}
out<<cnt<<"\n";
for (int i=cnt; i>=1; i--)
{
out<<sol[i]<<" ";
}
return 0;
}