Cod sursa(job #1426774)

Utilizator CiobraNume Prenume Ciobra Data 30 aprilie 2015 17:11:58
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <vector>
#include <fstream>

#define  ll long long
using namespace std;

int dp[100000];

int main()
{
    ll n;
    int v[100000];
    int cnt = 0;
    ifstream f("scmax.in");
    ofstream g("scmax.out");

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

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < i; ++j) {
            if (v[i] > v[j]) {
                dp[i] = dp[j] + 1;
                if (dp[i] > cnt)
                    cnt = dp[i];
            }
        }
    }
    g << cnt + 1 << endl;
    long long last = 100000;
    vector <int> result;
    for (int i = n; i >= 0; --i) {
        if (dp[i] == cnt && dp[i] < last) {
            last = dp[i];
            result.push_back(v[i]);
            --cnt;
        }
    }

    for (int i = result.size() - 1; i >= 0; i--)
        g << result[i] << " ";

    f.close();
    g.close();
    return 0;
}