Cod sursa(job #3003026)

Utilizator CiuiGinjoveanu Dragos Ciui Data 15 martie 2023 13:14:29
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <utility>
#include <cmath>
#include <map>
#include <deque>
#include <vector>
#include <set>
#include <queue>
#include <bitset>
#include <limits.h>
using namespace std;

/*
ifstream fin("triunghi5.in");
ofstream fout("triunghi5.out");
*/
ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int MAX_SIZE = 100000;
int v[MAX_SIZE + 1];
int prevI[MAX_SIZE + 1];
int dp[MAX_SIZE + 1];

void displayMaxSubsir(int i) {
    if (prevI[i] == i) {
        fout << v[i] << " ";
        return;
    }
    displayMaxSubsir(prevI[i]);
    fout << v[i] << " ";
}

int main() {
    int n;
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> v[i];
    }
    int maximumSubsir = 0;
    int startIndex = 0;
    for (int i = 1; i <= n; ++i) {
        dp[i] = 1;
        prevI[i] = i;
        for (int j = i - 1; j >= 1; --j) {
            if (v[j] < v[i]) {
                if (dp[i] < dp[j] + 1) {
                    dp[i] = dp[j] + 1;
                    prevI[i] = j;
                }
            }
        }
        if (maximumSubsir < dp[i]) {
            maximumSubsir = dp[i];
            startIndex = i;
        }
    }
    fout << maximumSubsir << "\n";
    displayMaxSubsir(startIndex);
}

/*
 
 
 */