Cod sursa(job #2966454)

Utilizator SkaduweePavel Bogdan Stefan Skaduwee Data 17 ianuarie 2023 17:36:11
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <vector>
using namespace std;

const int NMAX = 100000;
int n, v[NMAX+1], s[NMAX+1], pre[NMAX+1], ret;
vector <int> sol;
int main()
{
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");

    fin >> n;
    fin >> v[0];
    s[0] = 2;
    s[1] = 0;
    for (int i = 1; i < n; i++){
        fin >> v[i];
        int j = s[0];
        for (; j > 1; j--)
            if (v[s[j-1]] < v[i]){
                s[0] = max (s[0], j+1);
                s[j] = i;
                pre [i] = s[j-1];
                break;
            }

        if (v[s[j]] > v[i])
        {
            s[j] = i;
        }
    }
    fout << s[0] - 1<< '\n';
    sol.push_back(v[s[s[0]-1]]);

    int last = pre[s[s[0]-1]];
    for (int i = 1; i < s[0]-1; i++){
        sol.push_back(v[last]);
        last = pre[last];
    }
    for (int i = sol.size() - 1; i>=0; i--)
        fout << sol[i] << ' ';
    return 0;
}