Cod sursa(job #1872055)

Utilizator matzul98Socaciu Mihai matzul98 Data 7 februarie 2017 21:55:11
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>//TOTUL TRE LUAT DE LA DR LA ST CA SA PUTEM TIPARI CRESCATOR!
#include <fstream>
#define MaxN 100003
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");

int n = 5;
int arr[MaxN] = {24, 12, 15, 15, 19};
int maxL[MaxN]; //Lungimea maxima
int prec[MaxN]; //Ordinea elementelor din secvente
int pornire = 0;//Indexul de unde gasim secventa maxima

void Citire()
{
   f>>n;
   for(int i = 0; i < n; i++)
   {
      f>>arr[i];
   }
}

/*
void Init()
{
   //Initializam vectorii
   for(int i = 0; i < n; i++)
   {
      maxL[i] = 1;
      prec[i] = -1;
   }
}*/

void SCM()
{
   int max1 = -1;

   for(int i = 0; i < n; i++)
   {
      //Pornim de la 0, initializam fiecare
      maxL[i] = 1;
      prec[i] = -1;

      for(int j = 0; j < i; j++)
      {
         if(arr[j] < arr[i] && maxL[i] < maxL[j] + 1)//Sunt crescatoare si formeaza o secventa mai lunga
         {
            maxL[i] = maxL[j] + 1;
            prec[i] = j;//De unde l-am obtinut pe maxL[i]

            if(maxL[i] > max1)
            {
               //Lungimea maxima
               max1 = maxL[i];
               pornire = i;
            }
         }
      }
   }

   g<<max1<<endl;
}

void Constr()
{
   int i = pornire;//Cautatorul nostru
   while( i!=-1 )
   {
      g<<arr[i]<<" ";
      i = prec[i];
   }
}

int main()
{
   Citire();
   SCM();
   Constr();
}