Cod sursa(job #2416522)

Utilizator Briana_NeaguNeagu Briana Briana_Neagu Data 27 aprilie 2019 17:45:05
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <iostream>
#define maxi 100005

using namespace std;

ifstream f ("scmax.in");
ofstream g("scmax.out");

int n,v[maxi];
int prv[maxi];
int minim[maxi];/// minim[i] cel mai mic element care sfarseste un subsir cresc de lungime i


int k;

void afis(int i)  // lucrez cu indicii
{
    if (prv[i]==0)
    {
        g<<v[i]<<" ";
      return;
    }
    afis (prv[i]);
    g<<v[i]<<" ";
}


int bs(int x)
{
    int i=1,j=k;

    while (i<=j)
    {
        int m=(i+j)/2;

        if (v[minim[m]]<x)
            {
             i=m+1;
            }
        else if (v[minim[m]]==x)
            return m;
        else {
                j=m-1;
             }
    }
   return i;

}
int main()
{
    f>>n;
    for (int i=1;i<=n;i++)
        f>>v[i];
    minim[1]=1;
    k=1;

    for (int i=2;i<=n;i++)
    {
        if (v[i]>v[minim[k]])
             {
                prv[i]=minim[k];
                minim[++k]=i;
             }

        else
          {  int o=bs(v[i]);

              minim[o]=i;
              prv[i]=minim[o-1];
          }



    }
    g<<k<<'\n';
    afis(minim[k]);




}