Cod sursa(job #3265614)

Utilizator Victor5539Tanase Victor Victor5539 Data 1 ianuarie 2025 17:52:46
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <stack>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int MAX=1e5;
int n,i,v[MAX+5],nr,g[MAX+5],h[MAX+5],st,dr,mij,sol,poz;
stack <int> s;

int main()
{
    fin>>n;
    for (i=1; i<=n; i++)
        fin>>v[i];

    nr=1; g[1]=v[1]; h[1]=1;
    for (i=2; i<=n; i++)
    {
        if (v[i]>g[nr])
        {
            g[++nr]=v[i];
            h[i]=nr;
        }
        else
        {
            st=1; dr=nr; sol=0;
            while (st<=dr)
            {
                mij=(st+dr)>>1;
                if (g[mij]>=v[i])
                {
                    sol=mij;
                    dr=mij-1;
                }
                else
                st=mij+1;
            }

            g[sol]=v[i];
            h[i]=sol;
        }
    }

   fout<<nr<<"\n";

   poz=nr;

    for (i=n; i>=1; i--)
    {
        if (h[i]==poz)
        {
            s.push(v[i]);
            poz--;
        }
    }

    while (!s.empty())
    {
        fout<<s.top()<<" ";
        s.pop();
    }




 return 0;
}