Cod sursa(job #3324215)

Utilizator todoranstefaniaTodoran Stefania todoranstefania Data 21 noiembrie 2025 18:02:27
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100005], dp[100005], p[100005], n, ind[100005], k;
void scmax2()
{
    dp[1]=a[1];
    p[1]=1;
    int k=1;
    for(int i=2; i<=n; i++)
        if(a[i]>dp[k])
            dp[++k]=a[i],p[i]=k;
        else
        {
            int poz = upper_bound(dp+1,dp+k,a[i])-dp;
            dp[poz]=a[i];
            p[i]=poz;
        }
    fout<<k<<"\n";
    int stop,i;
    for(i=n; i>=1; i--)
        if(p[i]==k)
        {
            stop=i;
            break;
        }
    stack <int> st;
    for(int i=stop; i>=1; i--)
    {
        if(p[i]==k)
        {
            st.push(a[i]);
            k--;
        }
        if(k==0)
            break;
    }
    while(!st.empty())
    {
        fout<<st.top()<<" ";
        st.pop();
    }
}
int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>a[i];
    scmax2();
    return 0;
}