Pagini recente » Cod sursa (job #1396375) | Cod sursa (job #1360733) | Cod sursa (job #1333709) | Cod sursa (job #1523352) | Cod sursa (job #2325966)
#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])
{
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;
}