Pagini recente » Cod sursa (job #1910049) | Cod sursa (job #576775) | Cod sursa (job #143885) | Cod sursa (job #1104807) | Cod sursa (job #2325969)
#include <iostream>
#include <fstream>
using namespace std;
ofstream fo("scmax.out");
ifstream fi("scmax.in");
int n,a[100006],dp[100006],tati[100006],sol[100006];
int main()
{
fi>>n;
for(int i=1; i<=n; i++)
{
fi>>a[i];
dp[i]=1;
}
tati[1]=0;
for(int i=2; i<n; i++)
for(int j=i+1; j<=n; j++)
{
if(a[i]<a[j])
{
if(dp[j]<dp[i]+1)
{dp[j]=dp[i]+1;
tati[j]=i;}
}
else
{
dp[i]=max(dp[i],1);
}
}
int maximal=-10000;
int ii=0,lung;
for(int i=1; i<=n; i++)
if(maximal<dp[i])
{
maximal=dp[i];
ii=i;
}
lung=maximal;
fo<<maximal<<'\n';
while(tati[ii]!=0)
{
sol[lung]=a[ii];
ii=tati[ii];
lung--;
}
sol[lung]=a[ii];
for(int i=1; i<=maximal; i++)
fo<<sol[i]<<" ";
fi.close();
fo.close();
return 0;
}