Cod sursa(job #1533763)

Utilizator tc_iuresiures tudor-cristian tc_iures Data 22 noiembrie 2015 22:05:19
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

const int Nmax = 100005;

int v[Nmax], N, iMax = N, Max = -1;
int best[Nmax], succ[Nmax];

void read()
{
   ifstream f("scmax.in");
   f >> N;
   for(int i = 1; i <= N; i ++)
   {
      f >> v[i];
   }
   f.close();
}

void scmax()
{
   best[N] = 1;
   succ[N] = 0;
   for(int i = N-1; i >= 1; i --)
   {
      best[i] = 1;
      succ[i] = 0;
      for(int j = i+1; j <= N; j ++)
      {
         if((best[i] < best[j]+1) && (v[i] < v[j]))
         {
            best[i] = best[j]+1;
            succ[i] = j;
            if(best[i] > Max)
            {
               Max = best[i];
               iMax = i;
            }
         }
      }
   }
}

void print()
{
   ofstream g("scmax.out");
   g << Max << "\n";
   int x = iMax;
   do
   {
      g << v[x] << " ";
      x = succ[x];

   }while(x != 0);
   g.close();
}

int main()
{
    read();
    scmax();
    print();
    return 0;
}