Pagini recente » Borderou de evaluare (job #1750609) | Borderou de evaluare (job #1400516) | Borderou de evaluare (job #1707980) | Cod sursa (job #2604873) | Cod sursa (job #3005450)
#include<fstream>
#include<vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
typedef long long ll;
ll n,lmax[100001],a[100001],tati[100001];
vector<ll>pozitie;
void drum(int nod)
{
if(nod==0)
return ;
drum(tati[nod]);
pozitie.push_back(nod);
}
int main()
{
cin>>n;
for(int i=1;i <=n; ++i)
cin>>a[i];
for(int i=1; i<=n; ++i)
{
int maxi=0,poz=0;
for(int j=i-1;j>=1;j--)
if(a[i]>a[j] && lmax[j]>maxi)
{
maxi=lmax[j];
poz=j;
}
lmax[i]=maxi+1;
tati[i]=poz;
}
int maxi=0,poz=0;
for(int i=1;i<=n;++i)
{
if(lmax[i]>maxi)
maxi=lmax[i],poz=i;
}
cout<<maxi<<'\n';
drum(poz);
for(int i=1;i<=n;++i)
for(auto x:pozitie)
if(x==i)
cout<<a[i]<<" ";
return 0;
}