Cod sursa(job #2485914)

Utilizator mara_anghelinaAnghelina Mara mara_anghelina Data 2 noiembrie 2019 10:38:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <stack>

using namespace std;

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

int a[100005],v[100005],p[100005];
int n;
stack <int>s;

void citire()
{
    f>>n;
    for(int i=0;i<n;i++)
        f>>a[i];
}
int m=1;
int cautare_binara(int stg,int dr,int pz)
{
   if(stg==dr)
    return stg;
   int mij=(stg+dr)/2;
   if(a[pz]==v[mij])
      return mij;
   if(a[pz]>v[mij])
     return cautare_binara(mij+1,dr,pz);
   return cautare_binara(stg,mij,pz);
}
int lgmax,pozmax;
void rezolvare()
{
    v[0]=a[0];
    for(int i=1;i<n;i++)
    {
         int poz;
         if(a[i]>v[m-1])
        {
            poz=m;
            m++;
        }
        else
            poz=cautare_binara(0,m-1,i);
        v[poz]=a[i];
        p[i]=poz;
        if(poz>lgmax)
        {
            lgmax=poz;
            pozmax=i;
        }
    }

}
void afisare()
{
    g<<lgmax+1<<"\n";
    for(int i=pozmax;i>=0,lgmax>=0;i--)
        if(p[i]==lgmax)
        {
            lgmax--;
            s.push(a[i]);
        }
    while(!s.empty())
    {
        g<<s.top()<<" ";
        s.pop();
    }
}

int main()
{
    citire();
    rezolvare();
    afisare();
    return 0;
}