Cod sursa(job #2963558)

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

using namespace std;

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

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

void print (int pos)
{
    for (int i=pos-1; dp[pos] > 1 && i>0; i--)
    {
        if (a[i] < a[pos] && dp[i] == dp[pos] - 1)
            {
                print(i);
                break;
            }
    }

    out << a[pos] << ' ';
}

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);
        ans = max(ans, dp[i]);
    }

    out << ans << '\n';

    for (int i=n; i>0; i--)
    {
        if (dp[i] == ans)
        {
            print(i);
            break;
        }
    }

    return 0;
}