Pagini recente » Borderou de evaluare (job #452012) | Cod sursa (job #276282) | Cod sursa (job #3231881) | Cod sursa (job #1167077) | Cod sursa (job #3238722)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int v[100005],sol[100005];
vector<int>afis;
int main()
{
int n;
cin>>n;
sol[1]=1;
for(int i=1; i<=n; i++)
cin>>v[i];
int maxx=1;
for(int i=2; i<=n; i++)
{
sol[i]=1;
for(int j=1; j<i; j++)
{
if(v[j]<v[i])
sol[i]=max(sol[i],sol[j]+1);
}
maxx=max(maxx,sol[i]);
}
cout<<maxx<<'\n';
for(int i=n; i>=1; i--)
{
if(sol[i]==maxx)
{
afis.push_back(v[i]);
int poz=v[i],caut=maxx-1;
for(int j=i; j>=1; j--)
{
if(v[j]<poz && sol[j]==caut)
afis.push_back(v[j]),caut--,poz=v[j];
if(caut==0)
break;
}
break;
}
}
for(int i=afis.size()-1; i>=0; i--)
cout<<afis[i]<<" ";
return 0;
}