Cod sursa(job #2973598)

Utilizator tudor_costinCostin Tudor tudor_costin Data 1 februarie 2023 13:35:06
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Nmax=100005;
int a[Nmax],afis[Nmax],scmax[Nmax];
int minval[Nmax],ind[Nmax];
void reconst(int i)
{
    if(scmax[i]==1)
    {
        fout<<a[i]<<' ';
        return;
    }
    reconst(afis[i]);
    fout<<a[i]<<' ';
    return;

}
int main()
{
    int n;
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>a[i];
    }
    minval[1]=a[1];
    scmax[1]=1;
    ind[1]=1;
    int nr=1,sol=0,besti;
    for(int i=2; i<=n; i++)
    {
        int x;
        if(a[i]>minval[nr])
        {
            nr++;
            minval[nr]=a[i];
            ind[nr]=i;
            x=nr;
        }
        else
        {
            x=lower_bound(minval+1,minval+nr+1,a[i])-minval;
            minval[x]=a[i];
            ind[x]=i;
        }
        scmax[i]=x;
        afis[i]=ind[x-1];
        if(x>sol)
        {
            sol=x;
            besti=i;
        }
    }
    fout<<sol<<'\n';
    reconst(besti);
    return 0;
}