Cod sursa(job #2068504)

Utilizator infoarenautNeil Armstrong infoarenaut Data 17 noiembrie 2017 23:37:41
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
int main()
{
    int n,*v,*dp,*pos;
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    fin >> n;
    v = new int[n];
    dp = new int[n];
    pos = new int[n];
    for (int i = 0;i < n;i++) {
        fin >> v[i];
    }
    dp[0] = 1;
    pos[0] = 0;
    for (int i = 1;i < n;i++) {
        dp[i] = 1;
        pos[i] = i;
        for (int j = 0;j < i;j++) {
            if (v[i] > v[j]) {
                if (dp[i] < dp[j] + 1) {
                    dp[i] = dp[j] + 1;
                    pos[i] = j;
                }
            }
        }
    }
    int maxdp = -1,posmax = -1;
    for (int i = 0;i < n;i++) {
        if (dp[i] > maxdp) {
            maxdp = dp[i];
            posmax = i;
        }
    }
    fout << dp[posmax] << endl;
    int cnt = maxdp,crt_pos = pos[posmax];
    stack<int> st;
    st.push(v[posmax]);
    while (cnt - 1) {
        st.push(v[crt_pos]);
        crt_pos = pos[crt_pos];
        cnt--;
    }
    while (!st.empty()) {
        fout << st.top() << ' ';
        st.pop();
    }
    fout << endl;
    
    fin.close();
    fout.close();
    return 0;
}