Cod sursa(job #2878532)

Utilizator ctrohinCristina Trohin ctrohin Data 27 martie 2022 04:38:03
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
// Determinati lungimea subsitului crescator maximal (SCMAX)

#include <fstream>

using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");

void SCMAX(int n, int v[100001]) {
    int dp[100001];
    int pre[100001];
    int res[100001];

    dp[0] = 1;
    pre[0] = 0;
    for (int i = 1; i < n; i++) {
        pre[i] = 0;
        dp[i] = 1;
        for (int j = 0; j < i; j++) {
            if (v[i] > v[j]) {
                if (dp[j] + 1 > dp[i]) {
					dp[i] = dp[j] + 1;
                    pre[i] = j;
				}
            }
        }
    }

    int sol = dp[0], pos = 1;
	for (int i = 1; i < n; i++) {
		if (dp[i] > sol) {
			sol = dp[i];
			pos = i;
		}
	}

    cout << sol << endl;

    int j = sol;
    for (int i = pos; i != pre[i]; i = pre[i]) {
        res[--j] = v[i];
    }
     
    for (int i = 0; i < sol; i++) {
        cout << res[i] << " ";
    }

    cout << endl;

}

int main() {
    int n;
    int v[100001];

    cin >> n;

    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }

    SCMAX(n, v);

    cin.close();
    cout.close();

    return 0;
}