Cod sursa(job #3003710)

Utilizator DooMeDCristian Alexutan DooMeD Data 15 martie 2023 21:20:21
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5;

int v[nmax+5];
int dp[nmax+5], prv[nmax+5];
// dp[i] - lungimea celui mai lung scmax care se termina cu v[i]

int sol[nmax+5];

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

    int n; f >> n;
    for(int i=1; i<=n; i++) f >> v[i];

    int ans = 0, pos;
    for(int i=1; i<=n; i++) {
        int ret = 0;
        int mx = 0;
        for(int j=1; j<i; j++)
            if(v[j] < v[i] and dp[j] > mx) {
                mx = dp[j];
                ret = j;
            }
        dp[i] = mx + 1;
        prv[i] = ret;
        if(dp[i] > ans) {
            ans = dp[i];
            pos = i;
        }
    }
    for(int i=1; i<=ans; i++) {
        sol[i] = pos;
        pos = prv[pos];
    }
    g << ans << "\n";
    for(int i=ans; i>=1; i--) g << v[sol[i]] << " ";
    return 0;
}