Pagini recente » Cod sursa (job #1874889) | Diferente pentru ciorna intre reviziile 57 si 56 | Cod sursa (job #1671849) | Monitorul de evaluare | Cod sursa (job #1874707)
#include <iostream>
#include <cstdio>
#define NMax 100005
using namespace std;
int v[NMax], N, best[NMax], poz[NMax], p;
void Read()
{
scanf("%d", &N);
for(int i=1; i<=N; ++i)
scanf("%d", &v[i]);
}
int maxi;
void SCMAX()
{
best[N]=1;
poz[N]=-1;
maxi=1;
p=N;
for(int i=N-1; i>=1; --i)
{
best[i]=1;
poz[i]=-1;
for(int j=i+1; j<=N; ++j)
{
if(v[i]<v[j] && best[i]< best[j]+1)
{
best[i]=best[j]+1;
poz[i]=j;
if(best[i]>maxi)
maxi=best[i], p=i;
break;
}
}
}
}
void Print()
{
int i=p;
cout<<maxi<<"\n";
while(i!=-1)
{
cout<<v[i]<<" ";
i=poz[i];
}
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
Read();
SCMAX();
Print();
return 0;
}