Cod sursa(job #1504048)

Utilizator tudorv96Tudor Varan tudorv96 Data 17 octombrie 2015 11:38:04
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
using namespace std;

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

int n; ///numarul de numere
int v[100005]; ///sirul de numere
int dp[100005]; ///dp[i] = subsirul crescator maximal care se termina cu elementul v[i]
int t[100005]; ///t[i] = elementul anterior din subsirul crescator

void write(int p) {
    if (t[p] != -1) ///daca nu am ajuns la finalul subsirului
        write(t[p]); /// vom merge pana la inceputul subsirului
    fout << v[p] << " "; ///afisarea se va face invers, adica de la inceput la final
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> v[i]; ///citirea datelor
        dp[i] = 1;
        t[i] = -1;
    }

    for (int i = 1; i <= n; ++i)
        for (int j = 1; j < i; ++j)
            if (v[j] < v[i] && dp[i] < dp[j] + 1) {
                dp[i] = dp[j] + 1;
                t[i] = j;
            }

    int sol = 1, poz = 1;
    for (int i = 1; i <= n; ++i)
        if (sol < dp[i]) {
            sol = dp[i];
            poz = i;
        }
    fout << sol << "\n";
    write(poz);

} /// sergiu.ml/~tudor/emag