Cod sursa(job #3321469)

Utilizator Andreea1501013Andreea Andreea1501013 Data 9 noiembrie 2025 16:38:51
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;
int scm[100005]; /// scm[i]= elementul minim cu care se poate termina un subsir strict crescator de i elemente
int v[100005],pozScm[100005],sol[100005];

int main()
{
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    int N,nr,cnt=1;
    cin>>N;
    for(int i=1; i<=N; i++)
    {
        cin>>nr;
        v[i]=nr;
        if(i==1)
        {
            scm[1]=nr;
            pozScm[1]=1;
            continue;
        }
        if(nr > scm[cnt])
        {
            cnt++;
            scm[cnt]=nr;
            pozScm[i]=cnt;
        }
        else
        {
            /// caut primul nr mai mare sau egal cu nr si il inlocuiesc
            int poz = lower_bound(scm+1,scm+cnt+1,nr) -scm;
            scm[poz]=nr;
            pozScm[i]=poz;
        }

    }
    cout<<cnt<<'\n';
    int k=cnt;
    for(int i=N;i>=1;i--)
    {
        if(pozScm[i]==k)
        {
            sol[k]=v[i];
            k--;
        }
    }
    for(int i=1;i<=cnt;i++)
    {
        cout<<sol[i]<<' ';
    }
    return 0;
}