Pagini recente » Cod sursa (job #2823512) | Cod sursa (job #2640643) | Cod sursa (job #194834) | Cod sursa (job #270727) | Cod sursa (job #1754504)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int> CitireInput(int &dimensiuneSir)
{
ifstream in("scmax.in");
in>> dimensiuneSir;
vector<int> numere(dimensiuneSir + 1);
for( int i = 1; i<=dimensiuneSir; ++i )
{
in>> numere[i];
}
return numere;
}
int CautareLungimeMaxima(vector<int> numere, vector<int> &dimensiuneMaxima,
vector<int> &pozitie, int dimensiuneSir, int &pozitieStartSir)
{
int dimensiuneSubsirMaximal = 1;
pozitieStartSir = dimensiuneSir;
for( int i = dimensiuneSir-1; i >= 1; --i )
{
for( int j = i+1; j <= dimensiuneSir; ++j )
{
if( numere[i] < numere[j] && dimensiuneMaxima[i] < dimensiuneMaxima[j] + 1 )
{
dimensiuneMaxima[i] = dimensiuneMaxima[j] + 1;
pozitie[i] = j;
if( dimensiuneMaxima[i] > dimensiuneSubsirMaximal )
{
dimensiuneSubsirMaximal = dimensiuneMaxima[i];
pozitieStartSir = i;
}
}
}
}
return dimensiuneSubsirMaximal;
}
void ScrieRezultat(vector<int> numere, vector<int> pozitie,
int pozitieStartSir, int dimensiuneSubsirMaximal)
{
ofstream out("scmax.out");
out<< dimensiuneSubsirMaximal<< endl;
int i = pozitieStartSir;
while( i != -1 )
{
out<< numere[i]<<" ";
i = pozitie[i];
}
out.close();
}
int main()
{
int dimensiuneSir;
int pozitieStartSir;
vector<int> numere = CitireInput(dimensiuneSir);
vector<int> dimensiuneMaxima(dimensiuneSir + 1, 1);
vector<int> pozitie(dimensiuneSir + 1, -1);
int dimensiuneSubsirMaximal = CautareLungimeMaxima(numere, dimensiuneMaxima, pozitie, dimensiuneSir, pozitieStartSir);
ScrieRezultat(numere, pozitie, pozitieStartSir, dimensiuneSubsirMaximal);
return 0;
}