Pagini recente » Borderou de evaluare (job #1092224) | Borderou de evaluare (job #2390698) | Borderou de evaluare (job #2586776) | Borderou de evaluare (job #2239897) | Cod sursa (job #2501603)
#include <fstream>
#define N 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[N], ant[N], l[N];
int n,maxi,anterior;
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>a[i];
for(int i=1;i<=n;i++)
{
maxi=0; anterior=0;
for(int j=1;j<i;j++)
if(a[i]>a[j] and l[j]>maxi)
{
maxi=l[j];
anterior=j;
}
l[i]=1+maxi;
ant[i]=anterior;
}
int pos=1;
maxi=l[1];
for(int i=1;i<=n;i++)
{
if(l[i]>maxi)
{
maxi=l[i];
pos=i;
}
}
g<<maxi<<"\n";
int k=0;
int sol[N];
do{
sol[++k]=a[pos];
pos=ant[pos];
} while(pos);
for(int i=k;i>=1;i--)
g<<sol[i]<<" ";
f.close();
g.close();
return 0;
}