Cod sursa(job #2631037)

Utilizator justsomedudePalade Thomas-Emanuel justsomedude Data 28 iunie 2020 16:37:42
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
	
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
 
int lungime[100001], urm[100001], a[100001];
int n,i,j,start;
 
void Citire()
{
    ifstream fin("scmax.in");
    fin >> n;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    fin.close();
}
 
void LIS()
{
    /// intializari
    for (int i = n; i >= 1; i--) 
    {
        urm[i] = i;
        lungime[i] = 1;
    }

    for (int i = n; i >= 1; i--) 
    {
        int maxim = 0;
        for (int j = i - 1; j >= 1; j--)
        {
            if ((a[j] < a[i]) && (lungime[i] + 1 > lungime[j]))
            {
                lungime[j] = lungime[i] + 1;
                urm[j] = i;
            }
        }
    }
}

 
void Afisare()
{
    ofstream fout("scmax.out");
    int maxim = 0;
    int poz = 0;
    for (int i = 1; i <= n; i++)
    {
        if (maxim < lungime[i])
        {
            maxim = lungime[i];
            poz = i;
        }
    }

    fout << maxim << endl;
    fout << a[poz] << " ";

    while (urm[poz] != poz)
    {
        poz = urm[poz];
        fout << a[poz] << " ";
    }

    fout.close();
}
 
int main ()
{
    Citire();
    LIS();
    Afisare();
    return 0;
}