Cod sursa(job #2966445)

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

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

    fin >> n;
    fin >> v[0];
    s[0] = 2;
    s[1] = v[0];
    for (int i = 0; i < NMAX; i++)
        pre[i] = -1;
    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' << v[s[0]-1] << ' ';

    int last = pre[s[0]-1];
    for (int i = 2; i < s[0]-1; i++){
        fout << v[last] << ' ';
        last = pre[last];
    }
    return 0;
}