Cod sursa(job #3286692)

Utilizator ionicaion ionica Data 14 martie 2025 15:42:52
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#define NM 100001

using namespace std;

int n,a[NM],P[NM],L,Q[NM],lg,S[NM];
ifstream fin("scmax.in");
ofstream fout("scmax.out");

int main()
{
    int i,lg,st,dr,poz,mij,k;
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>a[i];

    Q[1]=a[1];
    P[1]=1;
    lg=1;

    for(i=2; i<=n; i++)
        if(a[i]>Q[lg])
        {
            lg++;
            Q[lg]=a[i];
            P[i]=lg;
        }
        else
        {
            st=1;
            dr=lg;
            poz=-1;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(a[i]<Q[mij])
                {
                    poz=mij;
                    dr=mij-1;
                }
                else st=mij+1;
            }
            Q[poz]=a[i];
            P[i]=poz;
        }
///afiseaza subsir crescator maximal
    k=n;
    for(i=lg; i>=1; i--)
    {
        while(P[k]!=i)
            k--;

        S[i]=a[k];
    }
    fout<<lg<<'\n';
    for(i=1; i<=lg; i++)
        fout<<S[i]<<' ';

}