Pagini recente » Cod sursa (job #1844278) | Cod sursa (job #2036896) | Cod sursa (job #357834) | Cod sursa (job #1930218) | Cod sursa (job #2130385)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long a[200005], l[200005], maxi, poz, lmax, n, i, j, p[200005], s[200005];
void din()
{
l[1]=1;
poz=1;
lmax=1;
for (i=2; i<=n; i++)
{
l[i]=1;
p[i]=-1;
maxi=0;
for (j=1; j<=i; j++)
if (a[j]<a[i] && l[j]>maxi)
{maxi=l[j];
l[i]=maxi+1;
p[i]=j;
if (l[i]>lmax)
{
lmax=l[i];
poz=i;
}}
}
}
void afis()
{
/*i=poz;
j=1;
while (i!=-1)
{
//g<<a[i]<<" ";
s[j]=a[i];
j++;
i=p[i];
}
reverse (s+1, s+lmax+1);
g<<lmax<<endl;
for (i=1 ;i<=lmax; i++)
g<<s[i]<<" ";*/
g<<lmax<<endl;
s[1]=a[poz];
lmax--;
int nr=1;
for(i=poz-1; i>=1; i--)
if(a[i]<s[nr]&&l[i]==lmax)
{
s[++nr]=a[i];
lmax--;
}
for(i=nr; i>=1; i--)
g<<s[i]<<' ';
}
int main()
{
f>>n;
for (i=1; i<=n; i++)
f>>a[i];
din();
/* for (i=1; i<=n; i++)
g<<l[i]<<" ";
for (i=1; i<=n; i++)
g<<p[i]<<" ";*/
afis();
}