All pastes #746888 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-10-23 15:51 UTC
rendered paste body
//Longest ascending subsequence
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

vector<int> vPred;
vector<int> a,v;
int imax;

void readData(ifstream& in)
{
 int aux;
 int i=1;
 while(!in.eof())
  {
   in >> aux;
   a.push_back(aux); //Az a vektorba lessz az eredeti sorozat
  }
}

void process()
{
 int j,i,n;
 v.push_back(1); //A legelso elemnel 1 a hossza a sorozatnak
 vPred.push_back(-1); //A legelso elem elott nincs semmi
 imax=0;
 n=(int) a.size();
 for(i=1;i<n;i++) 
  {
   v.push_back(1); //az illeto elemet 1 re inicializaljuk
   vPred.push_back(-1); // az illeto elemnel -1 re inicializalunk majd ugyis atirjuk ha kell
   for(j=0;j<i;j++)
    {
     if(a[j]<a[i] && v[j]+1>v[i]) // novekvo legyen es nagyobb mint az eddigi maximalis
      {
       v[i]=v[j]+1; //noveljuk
       vPred[i]=j; //megjegyezuk a helyet hogy majd visszakereshessuk
      }
    }
   if(v[i]>v[imax]) imax=i;  //uj maximalis ertekunk van, megjegyezzuk
  }
}

void recoverSubstring(int i, ofstream &out)
{
 //out << "Recovering substring..."<<endl;
 if(vPred[i]+1!=0)
 { 
  //out << "vPred["<<i<<"]+1!=0->"<<vPred[i]<<endl;
  recoverSubstring(vPred[i],out);
 }
  //else out << "vPred["<<i<<"]+1=0->"<<vPred[i]<<endl;
  out << a[i] << " ";
}


void writeData(ofstream &out)
{
 out << "v:";
 for(int i=0;i<(int)v.size()-1;i++) out << v[i] << " ";
 out << endl; 
 out << "vPred:";
 for(int i=0;i<(int)vPred.size()-1;i++) out << vPred[i] << " ";
 out << endl;
 out <<"Hossza:";
 out << v[imax] << endl;
 out <<"A sorozat: ";
 recoverSubstring(imax,out);
 out <<endl<<"Az eredeti:";
 for(int i=0;i<(int)a.size()-1;i++) out << a[i] << " ";
}

int main()
{
 ifstream in("ascending.in");
 ofstream out("ascending.out");
 readData(in);
 process();
 writeData(out); 
 return 0;
}