Cod sursa(job #2275132)

Utilizator RaresLiscanLiscan Rares RaresLiscan Data 2 noiembrie 2018 21:08:04
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

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

int v[100005], x[100005];
vector <pair <int, int> > V;
stack <int> s;

void f (int n)
{
    int val = v[n];
    for (int i = n - 1; i > 0; i --) {
        if (v[i] < val && x[i] > x[n]) {
            x[n] = x[i];
        }
    }
    x[n] ++;
}

int main()
{
    int n;
    fin >> n;
    for (int i = 1; i <= n; i ++) fin >> v[i];
    x[1] = 1;
    int maxim = 1, poz = 1;
    for (int i = 2; i <= n; i ++) {
        f(i);
        if (x[i] > maxim) maxim = x[i], poz = i;
    }
    fout << maxim << "\n";
    for (int i = poz; i > 0; i --) {
        if (x[i] == maxim) s.push(v[i]), maxim --;
    }
    while (!s.empty()) {
        fout << s.top() << " ";
        s.pop();
    }
    return 0;
}