Cod sursa(job #2963561)

Utilizator LucaMuresanMuresan Luca Valentin LucaMuresan Data 11 ianuarie 2023 15:06:27
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

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

int a[100001];
int dp[100001];

int main()
{
    int n;
    in >> n;

    for (int i=1; i<=n; i++)
        in >> a[i], dp[i] = 1;

    int ans = 0;

    for (int i=1; i<=n; i++)
    {
        int j = upper_bound(a+1, a+n+1, a[i]) - (a + 1);
        j++;
        dp[j] = max(dp[j], dp[i]+1);
    }

    for (int i=1; i<=n; i++)
        ans = max(ans, dp[i]);

    out << ans << '\n';

    vector<int>res;
    int len = ans;
    int val = 2e9+1;

    for (int i=n; i>0; i--)
    {
        if (a[i] < val && dp[i] == len)
        {
            res.push_back(a[i]);
            val = a[i];
            len--;
        }
    }

    reverse(res.begin(), res.end());

    for (int x : res)
        out << x << ' ';

    return 0;
}