Cod sursa(job #2032081)

Utilizator alextodoranTodoran Alexandru Raul alextodoran Data 4 octombrie 2017 15:26:05
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#define DN 100002
using namespace std;

int n, v[DN], dp1[DN], dp2[DN], p[DN], rez[DN], i, j, mx, pmx, k;

int main()
{
    ifstream fin ("scmax.in");
    ofstream fout ("scmax.out");
    fin >> n;
    for(i = 1; i <= n; i++)
    {
        fin >> v[i];
        dp1[i] = 0;
        dp2[i] = 1;
        for(j = i - 1; j != 0; j = dp1[j])
        {
            if(v[j] < v[i])
            {
                if(j > dp1[i])
                    dp1[i] = j;
                if(dp2[j] + 1 > dp2[i])
                {
                    dp2[i] = dp2[j] + 1;
                    p[i] = j;
                }
            }
        }
        if(dp2[i] > mx)
        {
            mx = dp2[i];
            pmx = i;
        }
    }
    fout << mx << "\n";
    k = mx;
    for(i = pmx; i > 0; i = p[i])
    {
        rez[k] = v[i];
        k--;
    }
    for(i = 1; i <= mx; i++)
        fout << rez[i] << " ";
    return 0;
}