Cod sursa(job #3314468)

Utilizator ilincaSSirbu Ilinca-Maria eu ilincaS Data 10 octombrie 2025 10:08:46
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

int v[100005];
int f[100005];
int tr[100005];
int cap[100005];
int pz[100005];

vector <int> rez;

int main()
{
    int n, mx=0, cj, mxx=0, poz;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i];
    }
    for(int i=1; i<=n; i++)
    {
        cj=mx=0;
        mx = lower_bound(cap+1, cap+mxx+1, v[i]) - cap;
        mx--;
        cj=pz[mx];

        tr[i]=cj;
        f[i]=mx+1;
        if(cap[f[i]]==0 || cap[f[i]]>v[i])
        {
            cap[f[i]]=v[i];
            pz[f[i]]=i;
        }
        if(f[i]>mxx)
        {
            poz=i;
            mxx=f[i];
        }
    }
    cout<<mxx<<'\n';
    while(poz>0)
    {
        rez.push_back(v[poz]);
        poz=tr[poz];
    }
    for(int i=rez.size()-1; i>=0; i--)
    {
        cout<<rez[i]<<" ";
    }


    return 0;
}