Pagini recente » Monitorul de evaluare | Cod sursa (job #2368402) | Cod sursa (job #824559) | Cod sursa (job #625134) | Cod sursa (job #2096092)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int main()
{
int a[100001],b[100001],p[100001],s[100001];
int i,j,N,m;
fin>>N;
for(i=1;i<=N;i++)
fin>>a[i];
b[1] = 1;
p[1] = 0;
int maxim;
for(i=2;i<=N;i++)
{
p[i] = 0;
maxim = 0;
for(j=1;j<i;j++)
if(a[j]<a[i] && maxim<b[j])
{maxim = b[j];
p[i] = j;}
b[i] = maxim + 1;
}
m = 1;
for(i=2;i<=N;i++)
if(b[m] < b[i]) m = i;
int k, kk;
k = b[m];
s[k] = a[m];
fout<<k<<'\n';
kk = k;
while(p[m])
{
m = p[m];
k--;
s[k] = a[m];
}
for(i=1;i<=kk;i++)
fout<<s[i]<<" ";
return 0;
}