Cod sursa(job #3255547)

Utilizator andiRTanasescu Andrei-Rares andiR Data 10 noiembrie 2024 23:55:04
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>

#define Nmax 100000
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n,i,nr,secvmx,st,dr,mij;
int l[Nmax+1],v[Nmax+1],pred[Nmax+1];
bool ok;

void sol(int i)
{
    if (i==0)
        return;
    sol(pred[i]);
    fout<<v[i]<<' ';
}
int main()
{
    fin>>n;
    for (i=1;i<=n;i++)
    {
        fin>>v[i];
        if (v[l[secvmx]]<v[i])
        {
            pred[i]=l[secvmx];
            l[++secvmx]=i;
        }
        else
        {
            ///cautare binara
            st=1;
            dr=secvmx;
            ok=1;
            while(st<=dr && ok)
            {
                mij=(st+dr)/2;
                if (v[l[mij]]<=v[i])
                {
                    st=mij+1;
                }
                else
                {
                    if (v[l[mij-1]]>=v[i])
                    {
                        dr=mij-1;
                    }
                    else
                    {
                        l[mij]=i;
                        pred[i]=l[mij-1];
                        ok=0;
                    }
                }
            }
        }
    }
    fout<<secvmx<<'\n';
    sol(l[secvmx]);

    fin.close();
    fout.close();
    return 0;
}