Cod sursa(job #2909293)

Utilizator zsoltzsoltDirirczi Zsolt zsoltzsolt Data 12 iunie 2022 12:58:38
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int maxim;
int max_poz;
int previous_poz[100000];

void max_subseq(int *arr, int n){
    int N = n;
    int DP[100000];

    DP[0] = 1;
    previous_poz[0] = -2;

    for(int i = 1; i < N; ++i){
        DP[i] = 1;
        previous_poz[i] = -1;
        for(int j = 0 ; j < i; ++j)
            if(arr[i] > arr[j])
                if(DP[j] + 1 > DP[i]){
                    DP[i] = DP[j] + 1;
                    previous_poz[i] = j;
                    if(maxim < DP[i]){
                        maxim = DP[i];
                        max_poz = i;
                    }
                }
    }
}

int main(void){
    int arr[100000];

    int n = 0;

    f >> n;

    for(int i = 0; i < n; ++i)
        f >> arr[i];

    max_subseq(arr,n);

    g << maxim << '\n';

    int pozitii[100000];
    int k = 0;

    for(int i = max_poz; i > -1; i = previous_poz[i]) pozitii[k++] = i;

    for(int i = k-1; i > -1; --i)
        g << arr[pozitii[i]] << ' ';

}