Cod sursa(job #2693306)

Utilizator IoanMihaiIoan Mihai IoanMihai Data 5 ianuarie 2021 14:31:36
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
using namespace std;
int n, maxx, p, a[100005], dp[100005], sc[10005];
int main() {
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    scanf("%d", &n);
    for (int i=1;i<=n;i++){
        scanf("%d", &a[i]);
    }

    dp[n] = 1;
    sc[n] = 1;

    for (int i=n;i>=1;i--){
        dp[i] = 1;
        sc[i] = -1;
        for (int j=i+1;j<=n;j++){
            if (a[i]<a[j] && dp[i]<dp[j]+1){
                dp[i] = dp[j] + 1;
                sc[i] = j;
                if (dp[i] > maxx) {
                    maxx = dp[i];
                    p = i;
                }
            }
        }
    }

    int i = p;
    printf("%d\n", maxx);
    while(i != -1){
        printf("%d ", a[i]);
        i = sc[i];
    }
    return 0;
}