Pagini recente » Cod sursa (job #1256396) | Istoria paginii utilizator/poison | Cod sursa (job #821433) | Cod sursa (job #870144) | Cod sursa (job #2023159)
#include <fstream>
#define max(a,b) (a > b ? a:b)
#define in "scmax.in"
#define out "scmax.out"
#define N 100003
using namespace std;
ifstream fin(in);
ofstream fout(out);
int v[N],n;
int ant[N],best[N];
int Max = 1,indMax;
void PD()
{
ant[1] = -1;
best[1] = 1;
int bestM,indexM;
for(int i=2; i<=n; ++i)
{
best[i] = 1;
ant[i] = -1;
for(int k=i-1; k>0; --k)
if(v[k] < v[i])
if(best[i] < best[k] + 1)
{
best[i] = best[k] + 1;
ant[i] = k;
}
if(Max < best[i])
{
Max = best[i];
indMax = i;
}
}
}
inline void afisare(int k)
{
if(k < 0) return;
afisare(ant[k]);
fout<<v[k]<<" ";
}
int main()
{
fin>>n;
for(int i=1; i<=n; ++i)
fin>>v[i];
PD();
fout<<Max<<"\n";
afisare(indMax);
fin.close(); fout.close();
return 0;
}