Pagini recente » Cod sursa (job #1538862) | Cod sursa (job #1440529) | Cod sursa (job #2184944) | Cod sursa (job #2862189) | Cod sursa (job #1853695)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream fout("scmax.out");
const int NMAX=100000+5;
int a[NMAX], tata[NMAX], sol[NMAX], k, n, prim;
bool vis[NMAX];
void dinam()
{
sol[n]=1;
tata[n]=-1;
prim=n;
int i , j;
for (i = n-1 ; i > 0; --i)
{
sol[i]=1;
tata[i]=-1;
for (j = i+1; j <= n; ++j)
{
if (a[i] < a[j] && sol[i]<sol[j]+1)
{
sol[i] = sol[j]+1;
tata[i] = j;
}
if(k<sol[i])
{
k=sol[i];
prim=i;
}
}
}
}
int main()
{
f >> n;
for (int i = 1; i <= n; ++i)f >> a[i];
dinam();
fout << k << "\n";
for (int i = prim; i != -1; i=tata[i])fout << a[i]<< " ";
return 0;
}