Cod sursa(job #3364020)

Utilizator Alias47John Doe Alias47 Data 26 august 2026 14:25:07
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef size_t ull;
typedef vector<int> vc;
typedef vector<vector<int>> matrix;
#define ft(n) for(int i=1; i<=n; i++)
#define sp ' '
#define vx first
#define vy second
string file = "scmax";
ifstream f(file + ".in");
ofstream g(file + ".out");

int n;
vector<int> v, dp, parents;

void init()
{
    f >> n;
    v.resize(n + 1, 0);
    dp.resize(n + 1, 0);
    parents.resize(n + 1, 0);
    ft(n)
        f >> v[i];
}

void scmax()
{
    for (int i = 1; i <= n; i++)
    {
        int maxx = 0;
        for (int j = 1; j < i; j++)
        {
            if (v[j]<v[i])
                if (dp[j]>maxx)
                {
                    maxx = dp[j];
                    parents[i] = j;
                }
        }
        dp[i] = maxx + 1;
    }
    int maxx = 0, imax=0;
    for (int i = 1; i <= n; i++)
    {
        if (dp[i] > maxx)
            maxx = dp[i], imax = i;
    }
    //output
    g << maxx << endl;
    stack<int> stk;
    for (int i = imax; i; i = parents[i])
        stk.push(v[i]);
    while (stk.size())
    {
        g << stk.top() << sp;
        stk.pop();
    }
        
}

int main()
{
    init();
    scmax();
    return 0;
}