Cod sursa(job #1729986)

Utilizator codebreaker24Tivadar Ionut codebreaker24 Data 15 iulie 2016 23:33:48
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <iostream>
#include <fstream>
using namespace std;

const int Nmax = 100000;

int dataString[Nmax];
int best[Nmax];
int sol[Nmax];
int pre[Nmax];
int n;
int lastindex;
int maxindex;

void readData();
void writeData();
void initData();
void doDynamic();
void doSol();

int main()
{


   initData();
   readData();
   doDynamic();
   doSol();
   writeData();
    return 0;
}

void readData()
{


    ifstream inFile ("scmax.in");
    inFile >> n;
    for(int i=0; i<n; i++)

    {

        inFile >> dataString[i];

    }

    inFile.close();


}
void initData()
{

    for(int i=0; i<Nmax; i++)
    {

        best[i] = 0;
    }

     best[0] = 1;
     pre[0] = -1;
     lastindex = 0;


}
void writeData()
{
    ofstream outFile ("scmax.out");
    outFile << maxindex << '\n';
    for(int i=maxindex-1; i>=0; i--)
    {

        outFile << sol[i] << " " ;
    }
    outFile.close();
}
void doSol()
{
    int i = lastindex;
    int k = 0;
    while(i!= -1)
    {
        sol[k] = dataString[i];
        i = pre[i];
        k++;

    }

}


void doDynamic()
{

  maxindex =-1;
   for(int i=1; i<n; i++)
   {
        best[i] = 1;
        pre[i] = -1;
          for(int j=0; j<i; j++)
          {
              if(dataString[i] > dataString[j] && best[i] <= best[j])
              {


                  best[i] = best[j] +1;
                  pre[i] = j;
              }
              if(best[i] > maxindex)
              {

                  maxindex = best[i];
                  lastindex = i;
              }

            }

   }





}