Pagini recente » Cod sursa (job #3203665) | Cod sursa (job #2516752) | Cod sursa (job #3123782) | Cod sursa (job #942342) | Cod sursa (job #2204061)
#include <iostream>
#include <fstream>
#define nMax 100005
#define For(i,a,b) for (int i=(a);i<=(b);++i)
#define Forr(i,a,b) for (int i=(a);i>=(b);--i)
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int a[nMax],best[nMax],poz[nMax],n,maxN,p;
void read()
{
in >>n;
For(i,1,n)
in >>a[i];
}
void dinamic()
{
best[n]=1;
poz[n]=-1;
maxN=1;
p=n;
Forr(i,n-1,1)
{
best[i]=1;
poz[i]=-1;
For(j,i+1,n)
{
if (a[i]<a[j] && best[i]<best[j]+1)
{
best[i]=best[j]+1;
poz[i]=j;
if (best[i]>maxN) maxN=best[i],p=i;
}
}
}
}
void constr()
{
int i=p;
while(i!=-1)
{
out <<a[i]<<" ";
i=poz[i];
}
}
int main()
{
read();
dinamic();
out <<maxN<<"\n";
constr();
return 0;
}