Pagini recente » Cod sursa (job #449374) | Cod sursa (job #3168956) | Cod sursa (job #1157490) | Cod sursa (job #50767) | Cod sursa (job #1652118)
#include <iostream>
#include <fstream>
using namespace std;
int urmatorul[100001],maxime[100001],nou[100001];
long int a[100001];
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
int i,j,n;
f>>n;
/* for(i=0;i<n;i++)
f>>a[i];
maxime[n-1]=1;
urmatorul[n-1]=-1;
int maxx=0,poz=0;
for(i=n-2;i>=0;i--)
{
maxime[i]=1;
urmatorul[i]=-1;
for(j=i+1;j<n;j++)
if(a[i]<a[j]&&maxime[i]<=maxime[j])
{
maxime[i]=maxime[j]+1;
urmatorul[i]=j;
if(maxx<maxime[i])
{
maxx=maxime[i];
poz=i;
}
}
}
g<<maxx<<'\n';
g<<a[poz]<<" ";
for(i=1;i<maxx;i++)
{
poz=urmatorul[poz];
g<<a[poz]<<" ";
}
*/
maxime[0]=1;
urmatorul[0]=-1;
for(i=0;i<n;i++)
{
f>>a[i];
if(i>0)
{
maxime[i]=1;
urmatorul[i]=-1;
for(j=0;j<i;j++)
if(a[j]<a[i]&&maxime[i]<=maxime[j])
{
maxime[i]=maxime[j]+1;
urmatorul[i]=j;
}
}
}
int maxx=0,poz=0;
for(i=1;i<n;i++)
{
maxime[i]=1;
urmatorul[i]=-1;
for(j=0;j<i;j++)
if(a[j]<a[i]&&maxime[i]<=maxime[j])
{
maxime[i]=maxime[j]+1;
urmatorul[i]=j;
if(maxx<maxime[i])
{
maxx=maxime[i];
poz=i;
}
}
}
nou[maxx-1]=a[poz];
for(i=maxx-2;i>=0;i--)
{
poz=urmatorul[poz];
nou[i]=a[poz];
}
g<<maxx<<'\n';
for(i=0;i<maxx;i++)
g<<nou[i]<<" ";
return 0;
}