Pagini recente » Cod sursa (job #1662435) | Monitorul de evaluare | Cod sursa (job #869063) | Monitorul de evaluare | Cod sursa (job #3344396)
#include <fstream>
#include <vector>
#define NMAX 100002
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N,a[NMAX],dp[NMAX],pred[NMAX];
vector<int>sol;
void citire()
{
fin>>N;
for(int i=1; i<=N; i++)
{
fin>>a[i];
}
}
int main()
{
citire();
int lmax,poz;
lmax=poz=0;
for(int i=1; i<=N; i++)
{
dp[i]++;
for(int j=1; j<i; j++)
{
if(a[j]<a[i] && dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
pred[i]=j;
}
}
if(dp[i]>lmax)
{
lmax=dp[i];
poz=i;
}
}
fout<< lmax << "\n";
while(poz)
{
sol.push_back(a[poz]);
poz=pred[poz];
}
for(int i=sol.size()-1; i>=0; i--)
{
fout<< sol[i] << " ";
}
return 0;
}